home *** CD-ROM | disk | FTP | other *** search
/ Freaks Macintosh Archive / Freaks Macintosh Archive.bin / Freaks Macintosh Archives / Macintosh / Development & Resource Tools / MacsBug6.5.3.sit / MacsBug 6.5.3 / Previous Version Changes < prev    next >
Text File  |  1996-02-22  |  105KB  |  2,055 lines

  1. ==========================================
  2.  MacsBug Release Notes and Bedtime Tales
  3. An ongoing release history for MacsBug 6.5
  4.       by Jim Murphy and Dave Lyons
  5. ==========================================
  6.  
  7. • 6.5.3  - Released 2/9/96
  8.  
  9.            POWERPC STACK CRAWL
  10.            -------------------
  11.  
  12.            Two bugs were fixed in Mixed Mode “SC6” stack crawls. The stack crawl would always
  13.            terminate when it encountered a 68K to PowerPC switch frame. It would also terminate with
  14.            no output in the PowerPC to PowerPC case if the current routine’s frame hadn’t yet been
  15.            set up.
  16.  
  17.            DISASSEMBLY
  18.            -----------
  19.  
  20.            When MacsBug is entered because of a crash, it no longer tries to disassemble instructions
  21.            around the current PC if it is at an invalid address (odd, unmapped, etc.). This means
  22.            that if a program somehow jumps into hyperspace, MacsBug won’t eat itself alive with
  23.            another exception. Instead, it will display a helpful message in the PC window area.
  24.  
  25.            The “PlayMem” 512-byte scratch area will now disassemble with a name and offsets.
  26.  
  27.            The ‘…’ character (Option-;) is now a shortcut for the address in the comment field at the
  28.            current PC. This is most useful when you want to disassemble at the target of a branch at
  29.            the current PC. With this shortcut, you no longer have to type the actual address.
  30.  
  31.            The “IL”, “IP”, and “ID” commands support a ‘-c’ parameter, which means “current ISA”. For
  32.            example, “il -c …” (where ‘…’ means branch target effective address) disassembles using
  33.            the correct disassembler automatically. This feature is best used inside of a macro, and
  34.            the new standard macro “IT” takes advantage of it (see the Macro section below).
  35.  
  36.            POWERPC DISASSEMBLY
  37.            -------------------
  38.  
  39.            Fixed a bug in the PowerPC disassembler front-end logic which would only let you
  40.            disassemble code at addresses after the system heap start and below the last byte of
  41.            contiguous RAM (not logically remapped memory), in PowerPC file mapped space, or in the
  42.            ROM. Any other location would get you an “unable to access that address” message.
  43.  
  44.            Rolled in the latest version of the disassembler. It’s a little smaller, and it fixes a 
  45.            problem where the extended mnemonic “mr.” was incorrectly disassembled as “mr”.
  46.  
  47.            The disassembler now calls the full symbol lookup code when performing effective address
  48.            replacement. This fixes two problems; 1) bls to C++ functions now shows the unmangled
  49.            name, 2) bls to functions not owned by CFM which contain traceback symbols will correctly
  50.            find and use the names.
  51.  
  52.            68K DISASSEMBLY
  53.            ---------------
  54.  
  55.            In 68K disassembly, MacsBug no longer says “will set to ones” for the $50FF instruction
  56.            (it’s an illegal 68K instruction). Added “will trap” and “will not trap” for the various
  57.            trap instructions.
  58.  
  59.            POWERPC EXCEPTIONS
  60.            ------------------
  61.  
  62.            Taking a PowerPC exception no longer trashes the 68K registers D0, A0 and A1. This meant
  63.            that as you stepped PowerPC code, some 68K registers were silently changing.
  64.   
  65.            MacsBug now tries to protect itself from installing its PowerPC exception handler twice.
  66.            This fixes the problem on certain Performa 5200/6200 configurations where you couldn’t
  67.            set breakpoints or step in PowerPC code.
  68.  
  69.            SYMBOL LOOKUP
  70.            -------------
  71.  
  72.            Sped up the PowerPC and 68K embedded symbol lookup when using the Command-: pop-up and
  73.            when evaluating any name in an expression.
  74.  
  75.            Significantly reworked the embedded symbol lookup code to better deal with areas of code
  76.            that are PowerPC, but aren’t known by CFM (such as accelerated resources). In the past, if
  77.            code wasn’t known by CFM, it was assumed to be 68K, and the PowerPC traceback code was
  78.            never given a chance to find symbols. That could give very misleading information since
  79.            quite often parts of PowerPC tracebacks look like old fixed-length 8-character MacsBug
  80.            names.
  81.  
  82.            Reduced the character space for valid traceback symbols to match embedded 68K symbols.
  83.            This should remove a number of invalid symbols.
  84.  
  85.            When showing what PowerPC fragment an address is within, we now show the byte offset into
  86.            the fragment. This helps when you’re in VM file mapped space and thus not in a heap block.
  87.  
  88.            Rolled in the latest C++ symbol unmangler. It’s way cool, and attempts to make sense out 
  89.            of the varying mangling schemes in the ARM, xlC, MrC, Symantec, and CFront. It does a very
  90.            good job, too.
  91.  
  92.            Refreshing the scrollback area after the Command-: symbols pop-up is dismissed now
  93.            correctly accounts for a scrolled history buffer and doesn’t redraw the wrong text.
  94.  
  95.            REGISTER EVALUATION
  96.            -------------------
  97.  
  98.            I can’t believe this has been broken for so long (all previous versions of MacsBug 6.5).
  99.            When running with VM on, the value to which “SP” and “A7” evaluate was the interrupt stack
  100.            pointer, which is wrong. They now correctly evaluate to the value displayed in the regster
  101.            area for A7.
  102.  
  103.            All 68K Dn and An registers are now valid when in PowerPC code. This means you can now
  104.            display and change them, regardless of the current instruction set. I could go on about
  105.            how this took some serious voodoo magic, but it didn’t.
  106.  
  107.            BREAKPOINTS
  108.            -----------
  109.  
  110.            Added support for a low-level PowerPC Debugger trap that will stop on the instruction
  111.            after the trap, without modifying any registers. This is useful for stopping in arbitrary
  112.            locations within hand-written assembly code. With this special trap, you don’t have to
  113.            make a cross-TOC call to the high-level Debugger implementation which destroys the
  114.            volatile registers. The trap instruction is:
  115.   
  116.                     #define kPowerPCLowLevelDebuggerTrap 0x7F800008   // tw LT|GT|EQ,r0,r0
  117.  
  118.            This trap instruction behaves much like the high-level Debugger call in that it can be
  119.            enabled and disabled with the “DX” (Debugger Exchange) command.
  120.  
  121.            The “BRM” command (Breakpoint Multiple) works again for the first time in years. It was
  122.            broken in the first version of MacsBug 6.5.
  123.  
  124.            STEPPING
  125.            --------
  126.  
  127.            Fixed a bug in the mode switching step logic. If you stepped across a PowerPC to 68K
  128.            boundary with a step count or expression (ie. Step until PC = blah), the 68K code on the
  129.            other side was disassembled as PowerPC. The instruction set associated with the current
  130.            PC, which is passed into the disassembler, was synchronized only when a 68K to PowerPC
  131.            switch occurred.
  132.  
  133.            After a step, we now show things of interest that may have changed. Currently MemErr,
  134.            ResErr, and QDErr are watched. If there’s anything else cool we should watch, let us know.
  135.            Here’s a sample line of output when the value of ResErr changed when a Step Over was
  136.            executed:
  137.  
  138.             Step (over) 
  139.               'CODE 0002 08D2' 
  140.                  +0274C 00CCFDBC   _GetResource                          ; 00049BAE   | A9A0 
  141.                         ••• ResErr changed to #-192 (from #0) 
  142.  
  143.            For drivers that like to call the Memory Manager, we need to save and restore MemErr
  144.            around all of the video driver calls in the step code path. This means MemErr won’t get
  145.            reset to zero as you step.
  146.  
  147.            A-TRAP ACTIONS
  148.            --------------
  149.  
  150.            Fixed A-Trap actions when tracing over a trap to actually work again. For example, if you
  151.            break on MountVol, and then set an ATB on Read, and then trace over the MountVol, you
  152.            won’t break on Read even though it’s being called a number of times. This was broken in
  153.            MacsBug 6.5.2 in an attempt to fix anther bug. Both are now fixed.
  154.  
  155.            A-Trap disassembly and breaking has been significantly enhanced to support all variants of
  156.            each trap word. For example, we now correctly disassemble the trap word 0xA22E as
  157.            BlockMoveData, and you can now break on it by name. We’d suggest using the new API command
  158.            to browse the full namespace that MacsBug supports for trap display and breaking.
  159.  
  160.            Updated trap selectors for DisplayDispatch, ColorSync 2.0, HFSUtil, FSM, ReleaseFolder,
  161.            QuickTime and SoundDispatch.
  162.  
  163.            API COMMAND
  164.            -----------
  165.  
  166.            Added a new command, “API”. This command shows anything MacsBug knows about a given trap
  167.            or trap range. It shows if the trap has selectors, what those selectors are, and if they
  168.            are implemented in 68K code, PowerPC, or both. It’s way cool, and will show even more info
  169.            in the future.
  170.  
  171.            HEAP DUMPING
  172.            ------------
  173.  
  174.            The “HD” command (Heap Dump) has new options that can greatly reduce the number of heap
  175.            blocks you need to examine during debugging. The ‘-s’ and ‘-e’ options allow you to
  176.            constrain the range of addresses that are dumped within the current heap. The ‘-s’ option
  177.            lets you specify the starting address, and ‘-e’ lets you specify the ending address.
  178.            If you use the two options together, ‘-e’ can optionally be used as a byte count. If the
  179.            end is less than the start, it’s a length.
  180.  
  181.            To limit display to blocks of certain sizes, you can use up to two options of the form
  182.            “,<20”. The possible tests are <, =, >, <=, and >=. For example, “HD RS,>1K,<5K” shows
  183.            resource blocks with sizes between 1K and 5K.
  184.  
  185.            COMMAND LINE
  186.            ------------
  187.  
  188.            The macro “GG” (clear breaks and Go) no longer gets saved into the command-line history.
  189.  
  190.            Made the command line history logic sensitive to case. This is useful such as when you
  191.            capitalize a case-sensitive CFM symbol incorrectly and then repeat the command. The
  192.            corrected version now gets saved in the command history.
  193.  
  194.            Parameter parsing works much better, because binary ‘-’ (subtraction, not negation) can no
  195.            longer have a blank before it. This means that commands such as “RD -f 2 -i 3” now work,
  196.            for example. Previously, it would try to evaluate “2-i”.
  197.  
  198.            MACSBUG PREFERENCES FOLDER
  199.            --------------------------
  200.  
  201.            The “MacsBug Preferences” folder can now be located in the same folder as MacsBug (the
  202.            System Folder) or within your “Preferences” folder (actually whatever it’s called, we’re
  203.            international-savvy). You can place your various preferences files within either or both
  204.            of these folders. As before, up to 32 files will be opened (this is the sum total of both
  205.            folders, not 32 per folder).
  206.  
  207.            DCMDS
  208.            -----
  209.  
  210.            The PC window now redraws if a dcmd modifies the current PC.
  211.  
  212.            Updated the Errors dcmd to match the latest Errors.h header file. I also rewrote it in C 
  213.            because I was bored one night (yes, that bored).
  214.  
  215.            Fixed two problems in the Leaks dcmd which could cause it to crash on 68K machines. It now
  216.            does Mixed Mode stack crawls only if it’s on a PowerPC machine. The PowerPC crawl now
  217.            validates the back chains as it climbs over switch frames. Updated the display of ISAs to
  218.            be more consistent with MacsBug.
  219.  
  220.            The Gestalt dcmd has been enhanced, and now takes two options. It can be asked to just
  221.            show one selector as in “Gestalt 'sysa'”, and it can just dump the installed selectors
  222.            without calling them as in “Gestalt -n”.
  223.  
  224.            The RD dcmd has a new option, ‘-o’, which turns on display of resource data offsets.
  225.            Some labels have been abbreviated to save space.
  226.  
  227.            The functionality of the StopIf dcmd is now part of MacsBug as a built-in command. The
  228.            external implementation was quite lame in that it poked MacsBug’s globals (incorrectly,
  229.            for the last couple of years).
  230.  
  231.            Fixed a problem where the A7 register as passed to dcmds with VM on is the wrong stack. It
  232.            was always passing the interrupt stack pointer, when it really should be the one shown in
  233.            the register display area as A7.
  234.  
  235.            Universalitized dcmd.h and dcmd.p. All constants are now enums, rather than #defines. The
  236.            input strings to callbacks that are constant are now declared properly. The files are now
  237.            wrapped in the standard C++ and structure alignment goo.
  238.  
  239.            Added the FSInfo dcmd (by Jim Luther), and made it format 3. It has a new option, ‘-t’, 
  240.            which shows a summary table of all installed external file systems.
  241.  
  242.            When warning that you have duplicate dcmds, the compare is now case-insensitive, so we
  243.            don’t miss any.
  244.  
  245.            Updated all of the sample dcmds sample build commands to be current.
  246.  
  247.            Included the latest PowerPC dcmds in their own file, “PowerPC dcmds”.
  248.  
  249.            MACROS
  250.            ------
  251.  
  252.            Added MPW SetKey-style key bindings for all extended keyboard function keys. You can
  253.            define macros that get executed when any of the keys are hit. The macros expected are of
  254.            the following form (where ‘n’ is the function key from 1 through 15):
  255.   
  256.                   DoFn
  257.                   DoCmdFn
  258.                   DoOptFn
  259.                   DoCmdOptFn
  260.  
  261.            The extended keyboard keys Help, Home, Page Up, Forward-Delete, End, and Page Down are now
  262.            supported. With Help you can type a command name and then Help, and you’ll get that
  263.            specific reference section. Help alone gives you the entire help text (pressing Help
  264.            places a ‘?’ as the first character on the command line and then presses return for you).
  265.  
  266.            Added “cw” and “cwp” macros for breaking into the Metrowerks debugger in 68K and PowerPC
  267.            code, respectively.
  268.  
  269.            The size of the buffer in which you can create macros at runtime has been increased from
  270.            256 bytes to 1K.
  271.  
  272.            The “MC” command (Macro) now wraps output properly, rather than having it extend off of
  273.            the right side of the screen.
  274.  
  275.            Added comments to some common macros, which are now shown if you get help on a macro.
  276.  
  277.            Added a macro named “IT” which disassembles the target effective address at the current
  278.            PC. This is a shortcut for typying “ILP …” or “IL …” (the macro does the right thing and
  279.            gets the instruction set correct).
  280.  
  281.            Added a “TimeTasks” macro for walking though all of the currently pending Time Manager
  282.            tasks.
  283.  
  284.            TEMPLATES
  285.            ---------
  286.  
  287.            Added some new basic types: SECONDS, ATRAPWORD, BINARY8, BINARY16, BINARY32, and OSTYPE.
  288.            A number of the standard templates were changed to use these new types.
  289.  
  290.            The CGrafPort template now references the portPixMap as a PixMap, rather than a handle.
  291.  
  292.            The IOREFNUM basic type now displays driver names as well as file names.
  293.  
  294.            Duplicate definitions of DCtlEntry and Driver were removed from the standard templates.
  295.  
  296.            LOGGING/STDLOG
  297.            --------------
  298.  
  299.            MacsBug now knows what version of the system it’s running on when you break into it right
  300.            after it loads. This means log files at boot time will go to the desktop by default (among
  301.            other internal behaviour changes).
  302.  
  303.            The log mechanism has been enhanced to be as robust as it can be, given the runtime
  304.            MacsBug lives in. We now make sure interrupts are enabled when both printing and logging.
  305.            We no longer write data to the log file when the file system is busy (as best as we can
  306.            tell), and you’ll get a warning message if it is. This should clean up a lot of lockups
  307.            if you NMI with logging on. Writes to the log no longer go into the file system cache.
  308.            When writing to the log file, we now flush the volume as well as the file. This way all
  309.            logging actions should stick even if you crash with the file still open.
  310.  
  311.            The “StdLog” macro (and any others that use the SET SUSPENDPROMPT feature) no longer
  312.            randomly starts prompting you to press return again after a dcmd executes.
  313.  
  314.            Fixed the “StdLog” macro so it doesn’t change your current TargetZone (the calls to “HX”
  315.            are now balanced).
  316.  
  317.            The “STAT” command now displays the Gestalt ‘sysu’ (System Update version) value if it’s
  318.            present.
  319.  
  320.            MISCELLANEOUS
  321.            -------------
  322.  
  323.            Help on the Help command works reliably now.
  324.  
  325.            Added a new SET option, “SIMPLIFIED”. This allows you to toggle the display of PowerPC
  326.            extended mnemonics.
  327.  
  328.            If MacsBug is running on a PowerPC machine, it now ignores what Gestalt says and records
  329.            that the ROM is really 4 MB. This means that using the “WH” command (Where) in the last
  330.            1 MB of the ROM will say it’s in ROM, because it really is. Previous versions of MacsBug
  331.            thought ROMs on PowerPC machines were 3 MB (that’s the size of the 68K portion).
  332.  
  333.            The U.S. KCHR that we distrbute is now the System 7.x one instead of 6.x.
  334.  
  335.            A command of “# ” (pound sign followed by a blank) means the rest of the line is a
  336.            comment. This is useful in macros.
  337.  
  338.            If we have a ‘#’ in front of a decimal constant and fail to convert it, that’s an
  339.            immediate syntax error. We no longer incorrectly proceed to look it up as a symbol.
  340.  
  341.            The machine names list had an incorrect ‘mach’ value for the 8100/100.
  342.  
  343.            Blank Return just scrolls display by one line, so you can now insert blank lines into the
  344.            history if you wish.
  345.  
  346.            The internal processor cache range flush routine now goes to extra efforts to make sure
  347.            that the cache flushing A-Trap it calls is implemented before calling it. This makes “SM”
  348.            (Set Memory) and breakpoints work at boot on older Mac IIs.
  349.  
  350.            The 6100/7100/8100 sound driver bus error fix now only runs on 7.5, 7.5.1, and 7.5.2. The
  351.            real bug has been fixed in System 7.5.3.
  352.  
  353.            The “CS” command (Checksum) now shows the checksum value. The trivially simple 68K
  354.            assembly code to do the checksum is:
  355.   
  356.             *****************************************************************************************
  357.             ;
  358.             ; pascal long ComputeChecksum(Ptr lowAddr, Ptr highAddr);
  359.             ;
  360.             ;    Calculate checksum over specified address range.  Checksum is calculated by summing
  361.             ;    one byte at a time into a long word starting from the low address, and rotating
  362.             ;    left 1 bit (high order bit rotates to low order bit) after each byte is added.
  363.             ;
  364.             
  365.             ComputeChecksum   FUNC    EXPORT
  366.  
  367.                               move.l   (sp)+, d0            ; Return address
  368.                               movea.l  (sp)+, a1            ; High address
  369.                               movea.l  (sp)+, a0            ; Low  address
  370.                               move.l   d0, -(sp)            ; Restore return address to stack.
  371.                               moveq    #0, d0
  372.                     
  373.             ; Sum bytes in long word, rotating left one bit after each byte is added.
  374.             
  375.             @loop             add.b    (a0)+, d0
  376.                               rol.l    #1, d0
  377.                               cmpa.l   a1, a0
  378.                               ble.s    @loop
  379.                               move.l   d0, 4(sp)
  380.  
  381.                               rts
  382.  
  383.                               ENDF
  384.  
  385.  
  386. • 6.5.2  - Released 7/26/95
  387.  
  388.  
  389. |          •• NOTE •• - MacsBug 6.5.1 was never released, so please be sure to read what changed in
  390. |          •• NOTE •• - that version in the section below.
  391.  
  392.  
  393.            MIXED MODE STEPPING
  394.            -------------------
  395.  
  396.            You can now step across all Mixed Mode transitions. This means that when you come up to a
  397.            MixedModeMagic trap, stepping once more lands on the first instruction on the other side,
  398.            whether it's 68K or PowerPC. Similarly, when you're stepping through PowerPC code that
  399.            calls the functions CallUniversalProc or CallOSTrapUniversalProc, you will automatically
  400.            land on the other side of the call. When returning from a 68K routine to PowerPC code or
  401.            vice-versa, stepping the return instruction will take you back to the caller, whether it's
  402.            68K or PowerPC. There should be no instances where stepping takes you into Mixed Mode itself
  403.            (so if you're debugging Mixed Mode, use another debugger).
  404.  
  405.            Mixed Mode stepping works equally well with accelerated ("fat") resources. If your 68K code
  406.            loads and calls into a fat resource, you can simply step right into it.
  407.  
  408.            NMIs IN NATIVE CODE
  409.            -------------------
  410.  
  411.            Using the NMI key sequence, you can now interrupt native code execution, and will land on the
  412.            PowerPC instruction you interrupted. However, due to reentracy concerns, you cannot interrupt
  413.            in the middle of Mixed Mode execution, you'll land in 68K code like you used to do with older
  414.            versions of MacsBug.
  415.  
  416.            BUS ERROR CATCHING ON POWERPC
  417.            -----------------------------
  418.  
  419.            Bus error handling on the first-generation PowerPC machines (6100/7100/8100) now works. This
  420.            really wasn't a bug in MacsBug, but I fixed it anyway. The problem was that the sound-in
  421.            component trashes the bus error vector when it is loaded (this is the case in 7.5 and 7.5.1). 
  422.            MacsBug now takes care of the component load through a magical patch, and fixes up the bus
  423.            error vector if it becomes damaged. See, MacsBug really is system software.
  424.  
  425.            POWERPC STACK CRAWL
  426.            -------------------
  427.  
  428.            Fixed the infinite loop bug in the “SC” command when walking back over PowerPC->68K switch
  429.            frames (mentioned in the 6.5.1 release notes).
  430.  
  431.            POWERPC DEBUGGER/DEBUGSTR CALLS
  432.            -------------------------------
  433.  
  434.            When you execute a Debugger or DebugStr in native code, you should no longer land in the
  435.            implementation (in InterfaceLib at present), you'll be in your own code right after the branch
  436.            to the library where they live.
  437.  
  438.            POWERPC STEPPING
  439.            ----------------
  440.  
  441.            Stepping or tracing with a count now works in PowerPC code.
  442.  
  443.            POWERPC REGISTER DISPLAY
  444.            ------------------------
  445.  
  446.            When on a PowerPC machine, we now show the current interrupt mask in place of the Memory
  447.            Manager mode in the left sidebar area (you're always in 32-bit mode). This is shown (and is
  448.            correct) when in both 68K or PowerPC code.
  449.  
  450.            The current interrupt mask is shown in the PowerPC register set when the “TD” command is used.
  451.  
  452.            Changed “TF” command to show the exponent and sign of each FPR as one component.
  453.  
  454.            REGISTER ASSIGNMENT
  455.            -------------------
  456.  
  457.            You can now set and get A5 when in both 68K and PowerPC code. For the moment, this is the only
  458.            68K register you can get to since it's the most useful. This means that macros like “thecport”
  459.            work regardless of the current instruction set.
  460.  
  461.            The 68020-040 register formerly known as “DFC” (Data Function Code) must now be called “RDFC”
  462.            so it's no longer hex (nobody cares about this register anyway).
  463.  
  464.            COMMANDS FIXED/ADDED
  465.            --------------------
  466.  
  467.            Added a new command "STAT" and incorporated it into the StdLog macro. It shows lots of useful
  468.            information you can see on the screen, but have never had an easy way of getting into the log
  469.            (at least not very concisely). For instance, it identifies the names of all shipping machines
  470.            that have unique box flag values, shows used stack space, max-used stack space when available,
  471.            and ResErr/MemErr when they are nonzero.
  472.  
  473.            The “EA” (Exit to Application) and “ES” (Exit to Shell) commands now work when you're in PowerPC
  474.            code.
  475.  
  476.            The “IR” (Instruction list to Return) command now works in PowerPC code with no address.
  477.  
  478.            “IRP” (Instruction list to Return PowerPC) command has been added.
  479.  
  480.            “GTP” (Go Till in PowerPC code) command has been added.
  481.  
  482.            Restarting (RS/RB) now works in a general way on PCI-based machines. It used to need a box flag 
  483.            table, which was a work-around for early developmental ROMs without a reasonable Gestalt selector
  484.            to identify that the machine needed a hard reset to restart.
  485.  
  486.            The “DMA” (Display Memory ASCII) command now honors the DITTO mode.
  487.  
  488.            WH COMMAND
  489.            ----------
  490.  
  491.            When displaying the CFM library an address lives in, we now display the executable and writable
  492.            status of the section the address is in (if any).
  493.  
  494.            If an address is in low memory, we now say so (instead of saying it's in RAM but not in a know heap).
  495.  
  496.            A-TRAP RECORDING ON QUADRA/PERFORMA 63x AND POWERBOOK 150
  497.            ---------------------------------------------------------
  498.  
  499.            It works, and doesn't make your machine crash. I really don't want to tell you why 'cause it
  500.            would make a great puzzle page.
  501.  
  502.            A-TRAP ACTIONS
  503.            --------------
  504.  
  505.            A-Trap tracing and recording no longer mask trap values into the A000-A0FF and A800-ABFF range
  506.            when displaying them, all bits are shown as-is when the trap was executed.
  507.  
  508.            A-Trap trace now shows the name of the real call that was made if the trap is selector-based
  509.            (dispatched), rather than the trap. This means you'll see traces with information such as
  510.            “SameProcess” instead of “OSDispatch”, which is much more useful.
  511.  
  512.            A-Trap recording and tracing now identifies Enqueue and Dequeue as stack-based traps rather
  513.            than register-based (they aren't).
  514.  
  515.            A-Trap break, trace, and step-spy logic has been fixed so you can now have combinations of them
  516.            pending at the same time that actually work. In the past you couldn't have a trace and a break
  517.            work at the same time, the first one that was activated got precedence. This means you can now
  518.            have multiple trace ranges and they'll work as well.
  519.  
  520.             Fixed the long-standing (since November 24, 1992, to be exact) bug where you'd land near a TRAP #$D
  521.            inside MacsBug if you stepped over an A-Trap that had a break action set on it.
  522.  
  523.            Setting an A-Trap break while in PowerPC code works (I was stupid and failed to install the
  524.            A-Trap dispatcher patch).
  525.  
  526.            68K DISASSEMBLY
  527.            ---------------
  528.  
  529.            When disassembling a MixedModeMagic trap (0xAAFE) that's at the current 68K PC, we now show the
  530.            address that you'll land if you step across the mode transition, as well as the destination
  531.            instruction set.
  532.  
  533.            When disassembling an A-Trap instruction, the comment field now contains the implementation
  534.            address of the trap, rather then the trap word. It's already shown off to the right anyway.
  535.  
  536.            POWERPC DISASSEMBLY
  537.            -------------------
  538.  
  539.            When disassembling PowerPC code that uses an offset off of R0, we now look up macros for that
  540.            address. For example, instead of getting this disassembly:
  541.            
  542.                            lwz r3, 0x064F(0)
  543.                         
  544.            you'll get:
  545.            
  546.                            lwz r3, JFlushCache(r0)
  547.  
  548.  
  549.            Throughout PowerPC disassembly all fields are now shown in hex instead of decimal.
  550.  
  551.            The symbol lookup code now lets tracebacks win if they're at the same address as a previously
  552.            found CFM export. This lets the disassembler munch the embedded data making the disassembly look
  553.            nicer (and smaller).
  554.  
  555.            The glue sniffer can now identify Microsoft-style cross-TOC glue.
  556.  
  557.            SYMBOL LOOKUP
  558.            -------------
  559.  
  560.            I drastically sped up CFM/traceback lookups over 6.5.1 so MacsBug is usable again.
  561.  
  562.            Optimized embedded 68K symbol lookup so it's about 10% faster.
  563.  
  564.            MISCELLANEOUS
  565.            -------------
  566.  
  567.            Fixed all instances (hopefully) where switching ISAs while in MacsBug wouldn't cause the register
  568.            names to be erased and redrawn. My internal concept of current and previous ISA was a bit loopy.
  569.  
  570.            The syntax error display for all non-repeating commands has been fixed (br, etc.) You'll no longer
  571.            see the entire help text as one garbled mess. Yeah, it confused me too.
  572.  
  573.            The “explain significance of” feature shows nicer output for slightly-negative numbers (0 to -16M).
  574.  
  575.            The display of “is a bad pointer” only yells about odd pointers on 68000s.
  576.  
  577.            Made internal commands override dcmds of the same name. You can specify a dcmd (only) by putting
  578.            a "∂" in front of the name (and it should work for Help, too, as in "?∂cfm").
  579.  
  580.            Allow "≠" for not-equal (Dave did it, I'll never remember it).
  581.             
  582.            Moved the typographical quotes up by one pixel (to make Greg Robbins happy).
  583.  
  584.            BUILT-IN DEBUGGER PREFS
  585.            -----------------------
  586.  
  587.            Fixed Get1xType and Get1xResource to be Get1IndType and Get1IndResource (we've added two macros
  588.            to let you still type Get1xType and Get1xResource if you really want to).
  589.  
  590.            Replaced PPCJump macro with a more general one. PPCJumpA is now the old "branch absolute"
  591.            version.
  592.  
  593. • 6.5.1  - Built 6/2/95 - never released due to serious symbol lookup bug
  594.  
  595.            POWERPC SYMBOL LOOKUP
  596.            ---------------------
  597.            
  598.            The PowerPC symbol lookup mechanism has been reworked so that exported CFM symbols and 
  599.            embedded traceback symbols get along much better. If you have a PowerPC container that
  600.            has both exports and tracebacks, CFM symbols no longer always win, the best (closest) symbol
  601.            of either type will be returned.
  602.            
  603.            When disassembling arbitrary PowerPC code (you know, when you're bored and still at work at
  604.            4:00 am), MacsBug now sniffs through cross-TOC glue code to provide meaningful symbols. So,
  605.            instead of seeing something like this:
  606.            
  607.                       bl        $+0x76F8                  ; 0x00007848 | 480076F9
  608.                       lwz       RTOC,0x0014(SP)                        | 80410014
  609.     
  610.            You'll see something like this:
  611.           
  612.                       bl        NewPtrSysClear            ; 0x00007848 | 480076F9
  613.                       lwz       RTOC,0x0014(SP)                        | 80410014
  614.           
  615.            Currently this works with applications and any import libraries that are pulled in by CFM as part
  616.            of a closure, such as InterfaceLib, MathLib, or DragLib, for example. If you load and prepare 
  617.            a fragment yourself, or use accelerated resources, MacsBug cannot identify the symbols in those
  618.            fragments. However, this may change in the future.
  619.            
  620.            EMBEDDED SYMBOLS
  621.            ----------------
  622.             
  623.            When walking a heap to search for embedded symbols, either by name or address, the code that
  624.            determined whether a heap block should be searched was rather lame. It rejected all non-relocatable
  625.            blocks, but was quite happy to search free blocks. This meant it wasted a lot time looking for
  626.            symbols where you wouldn't have any, and it probably missed others that you did have. One
  627.            place where you'll notice this is when you “HX” to the System heap and use symbols pop-up window.
  628.            You'll probably see lots of new names that have been lurking in non-relocatable blocks.
  629.            
  630.            Please note that if you evaluate a symbol in the System heap (by typing its name on the command-
  631.            line), the time to search can take significantly longer than in previous versions. This is simply
  632.            due to searching more blocks. In future versions the performance will be addressed.
  633.            
  634.            POWERPC EMBEDDED SYMBOLS
  635.            ------------------------
  636.            
  637.            You can now use the names of traceback symbols in expressions just as you have been able to
  638.            with embedded 68K MacsBug names for, well, ever. As with 68K names, only the TargetZone as
  639.            specified with the “HX” command will be searched.
  640.  
  641.            SYMBOLS POP-UP WINDOW
  642.            ---------------------
  643.            
  644.            The utility and size of the symbols pop-up window has been increased. The width is now relative
  645.            to the width of the MacsBug display area, so it's larger. This should provide a bit more room
  646.            for really long unmangled C++ symbols.
  647.            
  648.            MacsBug now locates and displays more types of symbols in the pop-up. It can now find 68K
  649.            embedded symbols, PowerPC traceback embedded symbols, and CFM code exports. Each symbol is now
  650.            classified with a symbol/instruction set designator at the right side of each line displayed.
  651.            The symbol types you should see, as well as their meanings, are as follows:
  652.            
  653.                  68K MBug - Traditional 68K MacsBug embedded symbol
  654.                  PPC TBT  - PowerPC/AIX-style traceback table embedded symbol
  655.                  PPC CFM  - PowerPC Code Fragment Manager exported TVector symbol
  656.  
  657.            POWERPC DEBUGGING
  658.            -----------------
  659.  
  660.            A number of bugs involving PowerPC debugging have been fixed. These are:
  661.            
  662.                 • You can now hit a breakpoint and Go from it. Previously, you had to step once before 
  663.                   allowing execution to continue or you'd crash.
  664.                 • You can now step over a subroutine call such as “bl” when it has a breakpoint set on it.
  665.                 • When stepping over a conditional subroutine call such as “beqlr” when the branch is not
  666.                   going to be taken, MacsBug no longer returns to running your program at full-speed.
  667.                 • Expressions and counts on breakpoints now actually work.
  668.             
  669.            POWERPC EXCEPTION PROCESSING
  670.            ----------------------------
  671.  
  672.            Previous versions of MacsBug would handle more or less every exception that was passed to it.
  673.            In certain situation this is a reasonably unfriendly thing for it to be doing, and can really
  674.            annoy the user. So, in an effort to be nicer to users as well as high-level debuggers, MacsBug
  675.            now only catches exceptions if nobody else chose to do so. This means that all PowerPC unmapped
  676.            memory exceptions that take place within the Modern Memory Manager due to broken applications
  677.            will once again be masked from the user's view.
  678.            
  679.            However, if you would prefer to be notified about every exception, there are two ways you can
  680.            re-enable previous behavior. At runtime, you can use the new “SET AUTOGP” command. When AUTOGP 
  681.            is enabled (the default), all exceptions are automatically forwarded to anyone who wants them.
  682.            When it's off, MacsBug will catch everything that comes its way. If you would like to permanently
  683.            set the behaviour, you can edit the 'mxpr' resource within MacsBug using ResEdit.  By setting the
  684.            “Don't auto propagate PowerPC xcpts” field, you can specify the initial AUTOGP value.
  685.  
  686.            When you're executing PowerPC code and somehow get your PC pointing into unmapped memory, MacsBug
  687.            handles this a bit better. It used to take a 68K bus error in the middle of the PowerPC bus error,
  688.            and it would show the entirely wrong register set. It's not perfect (yet) but at least it will be
  689.            a lot less confusing if this ever happens to you.
  690.  
  691.            HEAP ZONES
  692.            ----------
  693.            
  694.            Throughout MacsBug, application heaps are now called out with the name of their corresponding
  695.            application. Only the heap that an application was launched into is named, any other private
  696.            heaps that an application may have created are not named. Heap names are used in such places
  697.            as the “HX” (Heap Exchange), “HZ” (Heap Zones), “HT” (Heap Total), and “WH” (Where) commands,
  698.            among others.
  699.            
  700.            The “HZ” command has been enhanced to display the size of each heap in K. The values are shown
  701.            on the left side of the display before the heap addresses.
  702.  
  703.            HEAP CHECK COMMAND
  704.            ------------------
  705.             
  706.            The “HC” (Heap Check) command now has an option. Rather than just checking the TargetZone, you
  707.            can now check all heaps simultaneously with the “ALL” option. The set of heaps that is checked
  708.            is that same that are identified with the “HZ” command. If the command detects any of the heaps
  709.            to be corrupt, it will not terminate the overall check, it will continue on with the next heap
  710.            (if any).
  711.  
  712.            HEAP CORRUPTION DETECTION
  713.            -------------------------
  714.            
  715.            Whenever MacsBug walks a heap, either explicitly when you dump a heap, or implicitly when looking
  716.            up a symbol, each heap block is checked for possible corruption. However, due to a bug introduced
  717.            when it was rewritten in C, the three tests performed on each block all had to fail simultaneously
  718.            for a block to be marked as bad. Since two of the three were mutually-exclusive, MacsBug could never
  719.            detect any block as being bad. This strikes us as less than useful, so it's been fixed. Note that
  720.            this code was not part of the “HC” command, which worked fine, it's only a simple test within the
  721.            general heap walker mechanism.
  722.  
  723.            STACK CRAWL
  724.            -----------
  725.            
  726.            MacsBug now can walk A6/R1 Mixed Mode stacks with the “SC” command. Consistent with previous
  727.            behaviour, if it can't find a valid back-chain link, the crawl terminates. A very small number of
  728.            people have reported that the command occasionally never returns keyboard control. This may have
  729.            been due to other problems in embedded symbols lookup (which have been fixed and were noted above),
  730.            but since we could never reproduce the lockup, we're just not sure. If you have any problems with
  731.            this new feature, please let us know about it as soon as possible.
  732.  
  733.            Occasionally, if you and/or your computer got hit with some wiggy particle from space aliens, the
  734.            SC7 command would abort with an “Unable to access that address” message when looking for valid 
  735.            PowerPC return addresses. I got hit with a really gooey particle (knocked me unconscious, too) and 
  736.            was lucky enough to get a reproducible case of this problem, so now it's fixed.
  737.  
  738.            68K DEBUGSTR
  739.            ------------
  740.            
  741.            Due to a Ptr (generally signed char) vs. StringPtr (unsigned char) bug, the string that was passed
  742.            to DebugStr was limited to 127 characters. If the string was longer, nothing would be displayed.
  743.            This is no longer the case; DebugStr strings can now be up to 255 characters long.
  744.  
  745.            When running in 24-bit mode on a 32-bit capable machine, if the pointer to the DebugStr string had
  746.            any bits set in the high byte, MacsBug could bus error when trying to display the string. This has
  747.            been fixed.
  748.  
  749.            A-TRAP BREAKS
  750.            -------------
  751.            
  752.            When VM was on, and you attempted to break on a selector-based trap whose selector value was
  753.            on the stack, we looked on the wrong stack for the value. Obviously, this greatly reduced the
  754.            chances that we'd actually break when you expected it to.
  755.         
  756.            68K DISASSEMBLY
  757.            ---------------
  758.            
  759.            When disassembling a PACK A-Trap, we now display the name of the package in the comment field
  760.            of the disassembly.
  761.             
  762.            MEMORY SETTING AND DISPLAY
  763.            --------------------------
  764.            
  765.            When you use any of the Set Memory commands (“SM”, “SL”, etc.), the underlying processor cache
  766.            is now flushed over the range just set. This means you can now reliably modify code and then
  767.            execute it.
  768.            
  769.            A new basic type has been added to those used in templates. IOREFNUM supports the display of
  770.            the file name associated with a given refNum, as well as the open fork ([data] or [rsrc]). For
  771.            example, if you use the “iopb” template, the output of the ioRefNum field used to look like this:
  772.            
  773.                   008C0E40  ioRefNum           0D98
  774.  
  775.            but now looks like this:
  776.  
  777.                   008C0E40  ioRefNum           0D98 = MacsBug Release [data] 
  778.  
  779.            Changed the “DM” (Display Memory) command so that it uses ditto marks for groups of identical
  780.            lines when dittoing has been enabled with “SET DITTO ON”.
  781.  
  782.            The “DMA” (Display Memory ASCII) command can now accept very large byte counts.
  783.  
  784.            FILE DCMD
  785.            ---------
  786.  
  787.            The short-form display (file 0) now omits the fields which have no use after-the-fact in a
  788.            log file.
  789.  
  790.            LEAKS DCMD
  791.            ----------
  792.            
  793.            The various Memory Manager patches are now installed at dcmdSecondaryInit time so that we
  794.            can detect leaks in PowerPC code (after the native Modern Memory Manager is loaded).
  795.  
  796.            MISCELLANEOUS
  797.            -------------
  798.            
  799.            MacsBug now knows how to hide the hardware cursor on machines that support it, such as the
  800.            PCI boxes.
  801.  
  802.            The value of A7 shown by the “TD” (Total Display) command is now correct when running with VM
  803.            enabled. It used to be the value of the ISP, when it should have been the USP.
  804.  
  805.            When any command reports a syntax error, a message is shown with the proper command syntax.
  806.  
  807.            Added a new SET sub-option, “SUSPENDPROMPT”. This works much like the “SCROLLPROMPT” option,
  808.            but prompting is only disabled until the next line of command input is requested.
  809.  
  810.            BUILT-IN DEBUGGER PREFS
  811.            -----------------------
  812.  
  813.            The standard log macro (StdLog) has been enhanced somewhat. It now uses “HC” with the “ALL”
  814.            option, so it won't abort if a heap is corrupt. The macro now records the value of the long
  815.            at 0x00000000 so you can see if a piece of code was doing bad things.
  816.  
  817.            Changed some templates to use the new basic type IORefNum, where appropriate.
  818.  
  819.            Disk Init (PACK 2) actually takes its selector on the stack, not in D0. The glue moves it
  820.            through D0, which seems kind of lame, if you ask me (this means we won't disassemble this
  821.            without some special-case code which has yet to be written).
  822.  
  823.            Added selectors for SpeechRecognitionDispatch, PowerMgrDispatch selectors $22..$28, and
  824.            ControlStripDispatch selectors new with Control Strip 1.2.
  825.  
  826. • 6.5d12 - Released 4/13/95
  827.  
  828.            HEAP SCRAMBLING
  829.            ---------------
  830.            
  831.            When we move a block of data around, we can't tell if it contains executable code, so the
  832.            processor caches should have been flushed on the destination range. In the past, when
  833.            the entire cache was flushed very often, this wasn't a problem. With the cache flushing
  834.            changes in 6.5d10, heap scrambling became very much unreliable. This has been fixed.
  835.  
  836.            POWERPC EMBEDDED SYMBOLS
  837.            ------------------------
  838.            
  839.            We now support looking up PowerPC embedded symbols from traceback tables. If you're using the
  840.            newest Metrowerks 1.2.1 C/C++ compilers you can take advantage of this. The only other compiler
  841.            I know that currently supports traceback tables is xlc for the RS/6000. With the current
  842.            implementation, typing a symbol name will not evaluate to the address of that routine. The
  843.            traceback symbols are currently only used within a disassembly of PowerPC code.
  844.            
  845.            CFM SYMBOL LOOKUP
  846.            -----------------
  847.            
  848.            When you're stepping through a fragment of PowerPC code that doesn't contain any exported
  849.            CFM symbols (a simple application comes to mind), the delay between steps has been drastically
  850.            reduced. This was done by removing a very large number of Mixed Mode switches on each line of
  851.            disassembly, as well as fixing a logic bug that caused us to exhaustively look for 68K symbols
  852.            when there couldn't possibly be any.
  853.  
  854.            WH COMMAND
  855.            ----------
  856.  
  857.            When displaying an address that is in VM file-mapped space, MacsBug now shows what CFM library
  858.            the address resides within.
  859.  
  860.            STACK CRAWL
  861.            -----------
  862.            
  863.            MacsBug now understands Mixed Mode stacks when using the "SC7" command, and will show you
  864.            the instruction set of each caller. This command now works correctly from either PowerPC
  865.            or 68K code. For this release the "SC6" command works exactly as it did in 6.5d11 due to a
  866.            last-minute problem (infinite recursion sucks). It will fully understand Mixed Mode stacks
  867.            in the next release.
  868.  
  869.            POWERPC DEBUGGING
  870.            -----------------
  871.            
  872.                    • When stepping up to a flow of control instruction, MacsBug displays a message which
  873.                   indicates if the branch will or will not be taken. In previous versions this was
  874.                   frequently wrong due to a sign-extension bug in the compiler, which we've worked around.
  875.                 • You can now disable PowerPC Debugger and DebugStr calls with the “DX” command.
  876.                 • The “TF” (Total Floating Point display) command now works when in PowerPC code, and will
  877.                   show the entire PowerPC native FPU register set. You can now use “FPR0” through “FPR31”
  878.                   in expressions, although this is totally useless since MacsBug's expression evaluation
  879.                   is centered around 32-bit values, and FPRs are 64-bit.
  880.                 • When displaying the PowerPC register set via “TD”, we now know about the 603e, and display
  881.                   a reasonable message for future processors.
  882.                 • When debugging PowerPC code at boot time, we no longer display the name of the currently
  883.                   loading extension after each and every step or trace. My, that was annoying.
  884.  
  885.            There are a few problems with native debugging that you should be aware of. They are:
  886.            
  887.                    • If you're stopped on a native breakpoint, you currently can't Go, you need to Step once
  888.                   and then Go.
  889.                 • As above, if you're sitting at a branch to subroutine instruction that has a breakpoint
  890.                   located at it, you cannot Step Over the subroutine call without first removing the
  891.                   breakpoint.
  892.                 • If you use the single-machine Macintosh Debugger, or the Metrowerks Debugger which
  893.                   require the PowerMac Debug Services background application, you shouldn't place the
  894.                   app in the Startup Items folder. The app has a feature such that if it can't
  895.                   communicate with a host debugger, it will DebugStr into 68K code when it sees a
  896.                   native exception (breakpoint, trace, etc.). MacsBug will not get a chance to handle
  897.                   any native exceptions. If you do use a high-level debugger in cooperation with
  898.                   MacsBug, you should place the background application in the same folder as your
  899.                   debugger so it gets launched when you start up the debugger.
  900.  
  901.            RB AND RS
  902.            ---------
  903.            These commands no longer reboot if there are extra parameters on the command line. The 
  904.            motivation here is that Dave recently typed "rb -s" when he meant to type "rd -s", and
  905.            he really, really didn't mean to reboot his system at that particular time.
  906.  
  907.            DCMD COMMAND
  908.            ------------
  909.            
  910.            We've added a new command which displays a compact list of all installed dcmds. This list
  911.            includes the dcmd name and syntax, as well as the version if the dcmd is format 3 or later.
  912.            The command can accept a optional prefix string to limit the display to a subset of all dcmds.
  913.  
  914.            RD DCMD
  915.            -------
  916.            
  917.            We've added a new option, "-h" which will show information on a resource given its handle.
  918.            Very, very useful. When looking up resources by type, the "-t" option is now optional, so
  919.            you can now type something like “RD 'STR '”.
  920.  
  921.            GESTALT DCMD
  922.            ------------
  923.            
  924.            A number of new selectors were added to the list of those that are recognized.
  925.  
  926.            THING DCMD
  927.            ----------
  928.            
  929.            The Thing dcmd is now a part of the standard MacsBug distribution. This dcmd displays
  930.            information on Components.
  931.            
  932.            JUMPTABLE DCMD
  933.            --------------
  934.  
  935.            Fixed a stack imbalance problem that would cause MacsBug to exit when the dcmd was done
  936.            executing. Why this had that sort of behavior and didn't crash is extremely odd.
  937.            
  938.            EXPRESSION EVALUATION
  939.            ---------------------
  940.  
  941.            In the past there was no way to use the name of a trap in an expression and have it evaluate
  942.            to the trap's number. Using the syntax “††<trapname>” now provides for this. For example, if
  943.            you want to see what selector $18 off of trap HFSDispatch is, but you don't know the trap
  944.            number, this expression will do the trick:
  945.            
  946.                    dh 7018 ††HFSDispatch
  947.                 
  948.            Of course, in this example you had to know that 7018 was MOVEQ #$18, D0 (everyone does, right?).
  949.            
  950.            With the addition of ROM map and Code Fragment Manager symbols in recent releases, the potential
  951.            for confusion about exactly what symbol will be found if a name collision occurs has increased.
  952.            If you know that a symbol you're trying to look up is ROM map-based, you've been able to prefix
  953.            the symbol with the Option-R ('®') character. Now you can do a similar lookup order force for CFM.
  954.            If your symbol string is prefixed with Option-G ('©'), it will be searched for first in the CFM
  955.            name space. Since Option-G looks reasonable when displayed ('C' == CFM), but is a pain to remember,
  956.            Option-C now maps to Option-G (try it, they're identical as far as MacsBug is concerned).
  957.            
  958.            We've added a really cool new feature we call “explain significance of”. During simple expression
  959.            evaluation, we now show the magnitude of the resultant value in more human intelligible terms. In
  960.            our daily trials debugging the System Software, we're quite often surprised at how many people can't
  961.            look at a hex value and realize, “Oh, that's past the end of your logical RAM - that's why you died”.
  962.            With this feature we hope for a greater awareness of the general magnitude of things. For example,
  963.            typing the value $120C60 yields:
  964.            
  965.                 120C60 = $00120C60  #1182816  #1182816 '••`' (between 1M and 2M)
  966.                 
  967.            For values that contain lots of trailing zeros, you'll get to see a new notation we've developed
  968.            for more easily describing a 32-bit value. So that you don't have to call out each individual
  969.            trailing zero (and look silly counting along on your fingers as you talk to your co-workers), we've
  970.            developed the “kabillion” short-hand notation. For values that contain at least 5 trailing (least-
  971.            significant) zeros, the notation will be used. For example, for $40800000, you get:
  972.            
  973.                 40800000 = $40800000  #1082130432  #1082130432  '@A••' (just over 1G; 4 0 8 kabillion)
  974.             
  975.            This is read “four-zero-eight kabillion” or “four-oh-eight kabillion”. Cool, huh?
  976.  
  977.            You can now use the Option-/ character ('÷') as an alias for '/' (division).
  978.            
  979.            MACROS
  980.            ------
  981.            
  982.            Macros can now optionally take parameters. When processing a macro expansion, positional
  983.            parameters ®1 through ®9 represent the remaining whitespace-delimited tokens on the command
  984.            line after the macro name. The parser understands the number of parameters your macro requires
  985.            by noticing the highest-numbered parameter. If you use ®9 as a single parameter, you must have
  986.            eight preceding parameters, which are ignored. These parameters can be quoted with single or
  987.            double quotes, the quotes are not part of the parameter value. For example, the following
  988.            macro takes a single parameter, a resource type. You would invoke this macro with a command
  989.            line such as “gres 'gpch'”.
  990.            
  991.                    "gres", "atb GetResource (sp+2)^='®1'"
  992.  
  993.            A sample parameterized macro is provided within MacsBug which will break on all 68K calls to
  994.            GetResource, Get1Resource, and Get1xResource for a given type. This macro is named “RType”
  995.            and is invoked as in the example above.
  996.  
  997.            When displaying macros with the “MCD” command, and the macro expansion needed two or more
  998.            lines to be fully displayed, the text really should have wrapped instead of disappearing into
  999.            the bit-bucket off the right side of the screen. Therefore, we now wrap the text appropriately.
  1000.            If you terminate this command before it finishes, you'll now get control back a lot faster.
  1001.  
  1002.            Since the evaluation of trap numbers in expressions has changed, if you want to find the 
  1003.            trap name given a number but don't want to have to type “WH ††Axyz”, we've added a simple macro.
  1004.            The macro “WHT” shows the name and implementation address of a trap given a trap name or number.
  1005.  
  1006.            TEMPLATES
  1007.            ---------
  1008.            
  1009.            An extremely popular bug in template display has been fixed. When showing a region of memory
  1010.            with a template that contained a pointer field, and that field was filled was a garbage bus-
  1011.            error value, we'd quit showing the template when we reached that field. For example, doing
  1012.            “dm a0 iopb” with an ioNamePtr field pointing off into unmapped space no longer terminates
  1013.            the template display.
  1014.  
  1015.            MODERN MEMORY MANAGER HEAP STUFF
  1016.            --------------------------------
  1017.             
  1018.            When identifying whether a heap is the Process Manager heap, we now only do this if the
  1019.            Process Manager is around (ie. it's after boot time).
  1020.  
  1021.            DISASSEMBLY
  1022.            -----------
  1023.            
  1024.            When displaying the offset into a procedure, we now show 5 nibbles for the offset instead of 4.
  1025.  
  1026.            MISCELLANEOUS
  1027.            -------------
  1028.            
  1029.            If you've invoked a command that displays a lot of output, and tire of having to press Return
  1030.            or Space to display another page, you can now temporarily turn off these prompts. Using Command-
  1031.            Return or Command-Space at the prompt skips the remaining prompts this command would have generated.
  1032.            You can still abort the command by pressing any key, you just won't be asked about it a bunch of
  1033.            times. When the command terminates, the prompts will be re-enabled for the next command (unless
  1034.            you've used the SET SCROLLPROMPT OFF to globally disable the feature).
  1035.  
  1036.            When we switch instruction set displays, we should now properly clean up all extra pixels in
  1037.            the register subdisplay.
  1038.  
  1039.            When you execute a command with too many parameters, MacsBug now displays a much more useful
  1040.            message, as well as actually showing you what parameters weren't needed.
  1041.  
  1042.            Command-G, -S, and -T now only work if the command line is empty.
  1043.  
  1044.            The TestDcmd application will now load format 3 dcmds, but doesn't do anything special to support
  1045.            them.
  1046.  
  1047.            The PlayMem general-purpose buffer is now always 4-byte aligned.
  1048.  
  1049.            BUILT-IN DEBUGGER PREFS
  1050.            -----------------------
  1051.  
  1052.            We've added templates for the various SCSI Manager 4.3 API parameter blocks.
  1053.  
  1054.  
  1055. • 6.5d11 - Released 2/27/95
  1056.  
  1057.            POWERPC DEBUGGING
  1058.            -----------------
  1059.            
  1060.            The support for PowerPC debugging has been greatly improved from that in 6.5d10, and
  1061.            is now much more like debugging 68K code. The following enhancements have been made:
  1062.            
  1063.                 • MacsBug no longer handles all PowerPC trap or trace exceptions that are executed,
  1064.                   it only catches those that it specifically caused, or the special Debugger/DebugStr 
  1065.                   trap. This fixes the popular incompatibility with the single-machine Power Mac
  1066.                   Debug Services application.
  1067.                 • The Debugger and DebugStr native traps are handled properly so that you won't
  1068.                   repeatedly hit the trap instruction. You can now step up to and over these
  1069.                   traps. Previously you had to manually set the PC past the trap to continue.
  1070.                   DebugStr now shows the passed in string just like the 68K _DebugStr.
  1071.                    • You can now trace over subroutine calls such as ‘bl’.
  1072.                 • When you step up to a flow-of-control instruction, we now say whether the branch
  1073.                   will be taken or not.
  1074.                 • The PowerPC disassembler is now POWER-clean, and a lot smaller.
  1075.                 • When disassembling PowerPC code that includes CFM exports, you'll no longer see
  1076.                   the name of each procedure twice in succession.
  1077.                 • Setting breakpoints should now be much more reliable. We now flush the appropriate
  1078.                   PowerPC hardware cache lines when inserting and removing breakpoints. We used to
  1079.                   be really stupid and flush the 68K cache, which didn't do anything useful.
  1080.                 • We can now handle all native exceptions with VM enabled (we used to crash in a
  1081.                   most spectacular way).
  1082.                 • You can now set breakpoints in code that is file-mapped.
  1083.  
  1084.            PROCEDURE NAME DISPLAY
  1085.            ----------------------
  1086.            
  1087.            When deciding if we should redisplay the name of the current procedure at the top
  1088.            line of the PC window area, we used to fail if the PC was located at 2 GB or above
  1089.            ($7FFFFFFF+). The thing you'd most-likely notice about this problem was the “Will
  1090.            branch/not branch” message would be drawn on top of the hex target branch address
  1091.            when stepping.
  1092.  
  1093.            MODERN MEMORY MANAGER HEAP STUFF
  1094.            --------------------------------
  1095.            
  1096.            Previous versions of MacsBug were confused by the format of the Process Manager
  1097.            heap. If you'd “hx” to the heap, and then dump all relocatable and non-relocatable
  1098.            blocks, it thought they were all corrupt.
  1099.            
  1100.            When displaying the names of known heaps (System, Application, etc.), we now name
  1101.            the ROM read-only zone and the Process Manager heap. One place you'll see this is
  1102.            when you execute the “hz” command.
  1103.             
  1104.            BREAKPOINTS
  1105.            -----------
  1106.  
  1107.            Due to the above heap problem, trying to set a breakpoint in a block that lived
  1108.            in the Process Manager heap was a hit or miss proposition, and sometimes you'd
  1109.            even get a bus error. Since MacsBug is no longer confused about the heap format,
  1110.            breakpoints there should now work reliably.
  1111.  
  1112.            A-TRAP TRACING
  1113.            --------------
  1114.  
  1115.            The A-Trap trace mechanism has been enhanced to allow selective filtering of trap
  1116.            calls that get made at certain interrupt levels. When you're trying to find out why
  1117.            a piece of code crashed and you want to see the calling path, you can now see calls
  1118.            that are made with all interrupts enabled, for example. This can help filter out
  1119.            lots of noise and get you closer to the problem faster.
  1120.            
  1121.            When displaying each trap trace, the interrupt level at which the call was made is
  1122.            now shown.
  1123.  
  1124.            STACK CRAWL
  1125.            -----------
  1126.            
  1127.            No, I didn't do mixed-mode crawls yet. They'll be in the next release. I promise. What
  1128.            I did do is make the “SC7” command work when you're in PowerPC code (it does a crawl
  1129.            based on register r1). It does the job just as poorly as when in 68K code, but it's
  1130.            still somewhat useful.
  1131.  
  1132.            CFM SYMBOL LOOKUP
  1133.            -----------------
  1134.            
  1135.            We've sped up the process of lookup up CFM symbols quite a bit. The code that does
  1136.            this used to be 68K, so we'd take a mixed-mode switch on each symbol that we iterated
  1137.            over. The code is now native so we now take one switch on each lookup set, which is
  1138.            a tremendous reduction. You'll most notice this when you evaluate the name of a CFM
  1139.            symbol, such as “__NewPtr”. Native disassemblies may be a bit less jerky as well.
  1140.            
  1141.            ROM INFO SYMBOL FILES
  1142.            ---------------------
  1143.            
  1144.            When I introduced ROM symbol files in 6.5d10, I neglected to mention exactly where
  1145.            your ROMInfo/ROM map file should be placed. No matter what kind of file you're using,
  1146.            it must be located at the root level of your System folder.
  1147.  
  1148.            When loading ROMInfo files that contain unparseable text, the state machine used to
  1149.            identify the problem, but never did anything about it. It would then get stuck in
  1150.            a loop, and eventually would bus error. The error handling code has been improved
  1151.            quite a bit, and MacsBug now tells you near what character it ran into parse problems.
  1152.            Any symbols that were read up to that point will have been recorded properly. In the
  1153.            future, MacsBug will continue parsing until the end of the source file, in case there
  1154.            are more symbols after the point that it errored.
  1155.  
  1156.            FILL COMMAND
  1157.            ------------
  1158.            
  1159.            We've added a new command, “FILL”, that allows you to fill large (or small) ranges 
  1160.            of memory with a repeating long value. The range must be long-aligned and the count
  1161.            must be a multiple of four bytes.
  1162.  
  1163.            FILE DCMD
  1164.            ---------
  1165.  
  1166.            This dcmd now has a shorter display mode which skips showing all open font files.
  1167.            To use this shortened format, invoke the dcmd with a file reference number of zero
  1168.            (this is always a bad file reference number to the OS). The display looks much the
  1169.            same, except font files are ignored and a count of the number that was skipped is
  1170.            shown at the end of the list.
  1171.  
  1172.            RD DCMD
  1173.            -------
  1174.  
  1175.            The RD dcmd also has a short-format display which ignores all open font files.
  1176.            To use this new feature, invoke the dcmd with the new “-s” option.
  1177.            
  1178.            When listing all maps in the current chain with either -s or -c, the output has been
  1179.            made to align a bit better, and we've added a new field. For each open file, we now
  1180.            show the map flags field right after the map handle.
  1181.  
  1182.            For any resource map that is overriding the System file (such as the active enabler),
  1183.            you'll now see a “+” in the leftmost column.
  1184.            
  1185.            For any resource that has been purged, we draw a “*” symbol to the right of the
  1186.            handle address.
  1187.            
  1188.            GESTALT DCMD
  1189.            ------------
  1190.  
  1191.            We now skip the 'eajt' selector (Easy Access), because the first time you look it up,
  1192.            Easy Access tries to open a resource file to find the value, which hangs us. Hopefully
  1193.            we'll have a more general solution for this in the future.
  1194.            
  1195.            DCMD.H
  1196.            ------
  1197.            
  1198.            The dcmd.h header file which is used to build dcmds in C now requires you to build with
  1199.            at least the 2.0a3 Universal Headers because ExceptionInformation has been changed to
  1200.            ExceptionInformationPowerPC.
  1201.  
  1202.            BUILT-IN MACROS
  1203.            ---------------
  1204.  
  1205.            The “StdLog” macro has been changed to use the shorter display options of the File and
  1206.            RD dcmds. This leaves out mostly-useless information (open font files), and shortens
  1207.            the bug log so that the chances are greater that it will fit in a bug report. The
  1208.            display of the stack crawl has been moved to the end of the macro so that if we're on a
  1209.            bad stack we'll get everything else logged before the stack crawl fails.
  1210.            
  1211.            There's a new macro named “ropen” which sets A-Trap breaks on all traps that open
  1212.            resource files. When a trap hits, the name of the file that was being opened is shown.
  1213.            This macro is really useful when you're tracing the system boot process, or debugging
  1214.            a 3rd-party application and would like to know what files get opened.
  1215.  
  1216.            MACSBUG'S SELF CHECKSUM
  1217.            -----------------------
  1218.  
  1219.            In an effort to let you know when code has stomped upon MacsBug, it maintains a checksum
  1220.            of its code space. Each time you enter MacsBug this checksum is re-evaluated and compared
  1221.            to the original. If they differ, you will be alerted. However, due to some build changes
  1222.            way back in 1993, approximately 17K of the most critical part of MacsBug was being left
  1223.            out. This has been fixed.
  1224.            
  1225.            MISCELLANEOUS
  1226.            -------------
  1227.            
  1228.            When you use the “WH” (“Where”) command to classify an address, MacsBug now does a better
  1229.            job telling you if the address is in not in RAM or ROM.
  1230.            
  1231.            Fixed the 8-bit low-level character blitter to not trash register A2. I said I did
  1232.            this in 6.5d9, but it was actually trashing it in two different places. This could
  1233.            cause problems with dcmds that use the drawing callbacks and expect A2 to be properly
  1234.            preserved.
  1235.            
  1236.            Made MacsBug work on the Mac Plus, SE, Portable and PowerBook 100 again. Our ROM family
  1237.            check was changed in 6.5d10 to better work a future OS, and it broke really old machines
  1238.            by making us think they were Mac II-class with Color QuickDraw. I don't think so.
  1239.  
  1240.            Fixed the Log command so that it fails if you don't specify a file name when using the
  1241.            “-h” option.
  1242.  
  1243.            Fixed ATSS to make the “addr” parameter required. It was never optional, but the command
  1244.            handler never enforced it.
  1245.  
  1246.            Corrected some mistakes in the 6.5d10 release notes. Please see change bars (“|” in the
  1247.            leftmost column) for deltas.
  1248.  
  1249.            BUILT-IN DEBUGGER PREFS
  1250.            -----------------------
  1251.  
  1252.            Changes were made to various resources within the default debugger prefs which
  1253.            is part of the MacsBug file itself. They include:
  1254.  
  1255.                 • Trap AA54 has a name, so it's now listed as TextServicesDispatch.
  1256.  
  1257.  
  1258. • 6.5d10 - Released 12/16/94
  1259.  
  1260.            MULTIPLE DEBUGGER PREFS FILES
  1261.            -----------------------------
  1262.  
  1263.            We now support up to 32 debugger preferences files that can be named whatever you wish.
  1264.            MacsBug looks in a folder named “MacsBug Preferences” which must be located in the root
  1265.            of the System folder (in the future it may support the Preferences folder if there is a
  1266.            call for it). Selector trap names, macros, templates, and dcmds can be located in these
  1267.            files. Resources of type 'mxpr' (MacsBug prefs), 'mxbi' (MacsBug init), and 'mxbc'
  1268.            (MacsBug colors) must still be located in your "Debugger Prefs" file, which cannot be
  1269.            located in this new folder. If you place more than 32 files in this folder, MacsBug will
  1270.            only load resources from the first 32 and will warn you about this.
  1271.         
  1272.            BUILT-IN DEBUGGER PREFS
  1273.            -----------------------
  1274.  
  1275.            Changes were made to various resources within the default debugger prefs which
  1276.            is part of the MacsBug file itself. It includes:
  1277.  
  1278.                    • Added some missing selectors off of ScriptUtil and SoundDispatch
  1279.                    • Fixed the AUXDispatch selector length so we actually disassemble these
  1280.                 • Made the Gestalt dcmd part of the standard build
  1281.                 • Added a template for the dcmdParmBlock (describes format 3 parm block)
  1282.  
  1283.            PERFORMANCE SPEEDUPS
  1284.            --------------------
  1285.          
  1286.            MacsBug no longer flushes the entire processor cache(s) when entering and exiting. Any
  1287.            time we have need to maintain cache coherency (such as when we set a breakpoint in RAM),
  1288.            we do a local flush of the page(s) that contain the target addresses. With this change
  1289.            and the accidental flush bug fix described below, MacsBug should no longer be causing
  1290.            cache-related bugs to disappear when stepping, tracing, or handling A-trap actions. This
  1291.            should also contribute to an overall speedier feel on '040 CPUs.
  1292.  
  1293.            I fixed a really nasty typo in the procedure that sets MacsBug's A5 world as current.
  1294.            Someone rewrote it a while back (1991) and left the old code commented out in
  1295.            place. However, they commented out the procedure's RTS instruction as well. Unluckily,
  1296.            the code that we fell into was MacsBug's internal FlushCache routine which took no
  1297.            parameters, so we didn't crash (which would have forced someone to notice this
  1298.            a long time ago). By making this routine not fall into the flush code we've sped
  1299.            up a bunch of things to the point of being much less annoying to use. Things that
  1300.            are affected, in order of most visible to least:
  1301.  
  1302.                 • Any time we use trace exceptions to enter (most-noticeable for Step Spy)
  1303.                     
  1304.                     To show myself how much faster this now is, I did some timings when
  1305.                     booting my main MacsBug machine, a PowerBook Duo 280c. The results are
  1306.                     quite impressive and show over a 5X speedup for this particular case.
  1307.                     The test was to Step Spy a longword-aligned long location (this is handled
  1308.                     as a fast special-case inside MacsBug) which would not change. Timings are
  1309.                     in seconds from the time the first 'INIT' resource in the first extension
  1310.                     was to be loaded to the time that the Process Manager is first executed.
  1311.                     
  1312.                     16s  - Normal boot with MacsBug 6.5d10 installed but not activated in any way.
  1313.                     71s  - Step Spy enabled on 0x00000924 with MacsBug 6.5d10 (without flush bug).
  1314.                     376s - Step Spy enabled on 0x00000924 with MacsBug 6.5d9 (with flush bug).
  1315.                 
  1316.                 • When any A-Trap action of any sort (ATT, ATR, ATB, etc.) is pending
  1317.                 • When we handle any PowerPC exception (includes stepping and tracing)
  1318.                 • Within our SetTrapAddress skank-o-matic patch
  1319.                 • Dcmds that walk the heap via the callback no longer flush on each block walked
  1320.                 • Any callback a dcmd makes
  1321.                 • Any time a dcmd is called to perform any action
  1322.                 • Entering MacsBug via an NMI or any user-visible exception
  1323.                 • When we handle a bus error (visible to user) while in MacsBug
  1324.                 • When we do an ES or EA
  1325.                 
  1326.            MacsBug is a bit faster when swapping or scrolling the screen on PowerPC machines.
  1327.            We used to use BlockMove to do this, but internally it uses the 'dcbz' instruction
  1328.            which causes an alignment exception when writing to non-cacheable space (like the
  1329.            screen). We now use a function that is functionally equivalent to BlockMove, but that
  1330.            does not use 'dcbz'.
  1331.  
  1332.            ROM MAP/ROM INFO SYMBOL FILES
  1333.            -----------------------------
  1334.            
  1335.            We now support ROM map (old style) and ROMInfo (new-style) symbol files. Thanks to
  1336.            Cameron Esfahani for this way cool code (You da' man!). This means that during disassembly
  1337.            of ROM code you will see symbols for internal ROM routines, rather than just trap names.
  1338.            If in any expression a local symbol in your code collides with a ROM symbol, but you want
  1339.            to force the evaluation to match the ROM first, prefix the symbol name with the '®'
  1340.            (option-R) character.
  1341.  
  1342.            MacsBug currently looks for files of specific names for each machine. The name is chosen
  1343.            from the Gestalt 'mach' selector for the current machine. If a file name for your machine
  1344.            isn't found in MacsBug’s list, it tries to load a file named “ROMMap”. The list of
  1345.            supported files and the corresponding machine ID is:
  1346.  
  1347.                 "MacPlusROM.map",                    //    4
  1348.                 "MacSEROM.map",                        //    5
  1349.                 "MacIIROM.map",                        //    6
  1350.                 "MacIIxROM.map",                    //    7
  1351.                 "MacIIcxROM.map",                    //    8
  1352.                 "MacSE030ROM.map",                    //    9
  1353.                 "MacPortableROM.map",                //    10
  1354.                 "MacIIciROM.map",                    //    11
  1355.                 "MacIIfxROM.map",                    //    13
  1356.                 "MacClassicROM.map",                //    17
  1357.                 "MacIIsiROM.map",                    //    18
  1358.                 "MacLCROM.map",                        //    19
  1359.                 "MacQuadra900ROM.map",                //    20
  1360.                 "MacPowerBook170ROM.map",            //    21
  1361.                 "MacQuadra700ROM.map",                //    22
  1362.                 "MacClassicIIROM.map",                //    23
  1363.                 "MacPowerBook100ROM.map",            //    24
  1364.                 "MacPowerBook140ROM.map",            //    25
  1365.                 "MacQuadra950ROM.map",                //    26
  1366.                 "MacLCIIIROM.map",                    //    27
  1367.                 "MacPowerBookDuo210ROM.map",        //    29
  1368.                 "MacCentris650ROM.map",                //    30
  1369.                 "MacPowerBookDuo230ROM.map",        //    32
  1370.                 "MacPowerBook180ROM.map",            //    33
  1371.                 "MacPowerBook160ROM.map",            //    34
  1372.                 "MacQuadra800ROM.map",                //    35
  1373.                 "MacQuadra650ROM.map",                //    36
  1374.                 "MacLCIIROM.map",                    //    37
  1375.                 "MacPowerBookDuo250ROM.map",        //    38
  1376.                 "MacIIViROM.map",                    //    44
  1377.                 "MacPerforma600ROM.map",            //    45
  1378.                 "MacIIVxROM.map",                    //    48
  1379.                 "MacColorClassicROM.map",            //    49
  1380.                 "MacPowerBook165cROM.map",            //    50
  1381.                 "MacCentris610ROM.map",                //    52
  1382.                 "MacQuadra610ROM.map",                //    53
  1383.                 "MacPowerBook145ROM.map",            //    54
  1384.                 "MacLC520ROM.map",                    //    56
  1385.                 "MacQuadra660AVROM.map",            //    60
  1386.                 "MacPerforma46xROM.map",            //    62
  1387.                 "MacPowerBook180cROM.map",            //    71
  1388.                 "MacPowerBookDuo270cROM.map",        //    77
  1389.                 "MacQuadra840AVROM.map",            //    78
  1390.                 "MacPerforma550ROM.map",            //    80
  1391.                 "MacPowerBook165ROM.map",            //    84
  1392.                 "MacLC475ROM.map",                    //    89
  1393.                 "MacQuadra605ROM.map",                //    94
  1394.                 "MacPowerBookDuo280ROM.map",        //    102
  1395.                 "MacPowerBookDuo280cROM.map"        //    103
  1396.  
  1397.            If, using the two above tries, MacsBug fails to load any map file, it tries to load the
  1398.            new-style “ROMInfo” file. For this style of file there presently is no machine name to
  1399.            machine ID mapping, since there is no officially maintained ROMInfo file collection as
  1400.            there is with the ROM map files (they are packaged with MPW on the E.T.O. developer CDs).
  1401.  
  1402.            DCMD CHANGES
  1403.            ------------
  1404.  
  1405.            We now support a new style of dcmd, format 3. Most of the changes are designed to make it
  1406.            easier to add functionality to the dcmd callback and action interfaces in the future.
  1407.            Format 3 dcmds will not load on versions of MacsBug prior to 6.5d10.
  1408.            
  1409.            To build a format 3 dcmd, the BuildDcmd tool has been enhanced to take a format specifier
  1410.            option. If the '-format3' option is passed, the tool generates the new style dcmd. If no
  1411.            option is specified, the older style format 2 dcmd is generated. The only physical
  1412.            difference in the two formats is the embedded version word. All other differences are in
  1413.            the programming model MacsBug provides, and the requirements MacsBug makes on the dcmd.
  1414.  
  1415.            New dcmds are required to ignore action requests that they do not handle or recognize.
  1416.            This means that they must not display any sort of error if given an undefined action
  1417.            (no beeping!).
  1418.            
  1419.            The DcmdParmBlk structure has been extended with the MacsBug version, maximum supported
  1420.            callback number, current ISA, PowerPC exception structure pointer, and general-purpose
  1421.            I/O buffer pointer.
  1422.            
  1423.            The 68K RegisterPtr and PowerPC exception structures will only be valid if the respective
  1424.              pointers are non-nil. At present the structures will only be valid when the corresponding
  1425.              ISA is the current ISA. For example, if the current ISA is kM68KISA, then the 68K register
  1426.              set will be valid and the PowerPC information will not be valid. This may change in the
  1427.              future such that both register sets may be valid at the same time, so check for non-nilness
  1428.            rather than the associated ISA.
  1429.  
  1430.            Added a new action code, dcmdGetInfo, which returns dcmd version, usage string, and
  1431.            credits string. For format 3 dcmds this means that when given the dcmdHelp message, a
  1432.            dcmd should only draw the body of the text and no headers or usage information. MacsBug
  1433.            uses a combination of the dcmdGetInfo and dcmdHelp messages to display a more uniform
  1434.            help and usage.
  1435.             
  1436.            Added a new action call dcmdSecondaryInit which is called at a time when all System
  1437.            patches have been loaded (including native code on PowerPC), but is immediately before
  1438.            extension/INIT loading. This may only be guaranteed with 7.1, (7.1.1), 7.1.2, and 7.5.
  1439.            This is a good time to apply persistent global toolbox patches or record various state
  1440.            information before extensions or the Process Manager have a chance to muck things up.
  1441.  
  1442.            Added a new action call, dcmdShutdown, which is presently not used. It'll be more defined
  1443.            in a future release.
  1444.  
  1445.            POWERPC DEBUGGING
  1446.            -----------------
  1447.            
  1448.            WARNING: The native disassembler included in this version is not POWER clean. It will
  1449.                        execute illegal PowerPC instructions when disassembling a variety of opcodes
  1450.                     on a 603 or 604 machine. This will be resolved by the next build.
  1451.            
  1452.            PowerPC debugging is enabled for the first time. With this build the support is
  1453.            quite rudimentary, however. A few new commands were added to support the PowerPC
  1454.            feature set. They are:
  1455.  
  1456.            ILP - Disassembles PowerPC instructions from a given address.
  1457.            IPP - Disassembles a half-page of PowerPC instructions centered on the given address.
  1458.            IDP - Disassembles 1 line of PowerPC instructions.
  1459.            DHP - Disassembles a sequence of 32-bit expressions as PowerPC instructions.
  1460.            GP  - Propagates the PowerPC exception we last handled to the next exception handler
  1461.                     registered with the system.
  1462.            BRP - Sets a breakpoint in PowerPC code (does not currently support breakpoints in ROM).
  1463.  
  1464.            The behavior of some commands have been enhanced to support PowerPC debugging. The
  1465.            changes that have been made thus far are:
  1466.  
  1467.            TD  - When in PowerPC code, this displays the entire PowerPC register set.
  1468.            IL  - When the current ISA is PowerPC, typing IL without an address (which implies the
  1469.                     current PC), MacsBug will automatically disassemble the code as PowerPC.
  1470.            IP  - When the current ISA is PowerPC, typing IP without an address (which implies the
  1471.                     current PC), MacsBug will automatically disassemble the code as PowerPC.
  1472.            WH  - If the address being examined is located within a CFM container, MacsBug will
  1473.                  display the name of the fragment, along with the nearest exported symbol.
  1474.  
  1475.            MacsBug now understands all native PowerPC exception types when they occur, and will
  1476.            activate with the display formatted for debugging PowerPC code. For example, if native
  1477.            code causes a bus error, MacsBug will gain control and break into the code at the
  1478.            address of the faulting code, just like it does for 68K code. From there you can step,
  1479.            display and change registers, use dcmds, etc. Be aware that stepping and tracing in this
  1480.            release is extremely limited. You can only step one instruction at a time, and cannot
  1481.            step over any branch instructions (you'll always step into the branch call). Full PowerPC
  1482.            debugging will be available in a future release.
  1483.  
  1484. |           There currently isn't any way to step over Mixed Mode transitions from one ISA to another -
  1485.            you'll need to set a breakpoint on the other side of the transition and go until it is
  1486. |           hit. In the future MacsBug will be intelligent about this, and debugging the two instruction
  1487.            sets will be seamless.
  1488.            
  1489.            SYMBOL LOOKUP
  1490.            -------------
  1491.  
  1492.            We now use the Code Fragment Manager to look up symbols when running on PowerPC machines.
  1493.            Many commands benefit from this, including but not limited to WH, DM, ILP, and DHP.
  1494.  
  1495.            SELECTOR-BASED TRAP NAMES
  1496.            -------------------------
  1497.  
  1498.            The ATP command now displays actual selector names of calls that were made, as well as
  1499. |           the parent trap. The parent trap name is shown in parenthesis.
  1500.  
  1501.            LOGGING
  1502.            -------
  1503.  
  1504.            Log files are now created by default on the root of the boot volume. The Log command now
  1505.            has a parameter, '-h'. This allows you to save your scrollback history from the beginning
  1506.            to the bottom of the current screen (if you've scrolled up into the history when you
  1507.            execute this, all lines off of the bottom of the screen will be lost, as with any other
  1508.            command). Thanks to Hoon Im for taking some time out to add these cool features way back
  1509.            for 6.5d9, but we forgot to tell you about them.
  1510.  
  1511. |           Note that the log file will remain open. You must execute the “log” command with no parameters
  1512. |           to close the file.
  1513.  
  1514.            RESTART/REBOOT COMMANDS
  1515.            -----------------------
  1516.  
  1517.            RS and RB commands should now work on the Mac Plus, and more importantly, they should once
  1518.            again work on all future machines. Both of these commands now use the Shutdown Manager
  1519.            (ShutDwnStart) if it is deemed necessary. However, they will not run any items that have
  1520.            been queued with ShutDwnInstall on the premise that your machine is probably already hosed
  1521.            and running a high-level shutdown proc probably wouldn't be a good idea at this point.
  1522.            
  1523.            PCI BUS DISPLAY SUPPORT
  1524.            -----------------------
  1525.            
  1526.            The video initialization and control code was rewritten to support the new PCI machines.
  1527.            Since these machines no longer have NuBus-style declaration ROMs, we now use new video
  1528.            driver calls to obtain information we previously used the Slot Manager for (getting base
  1529.            addresses, bit depths, etc.). If the new calls fail (as they will on non-PCI machines at
  1530.            present), we drop back to using the Slot Manager.
  1531.  
  1532.            MEMORY USAGE AND ERROR REPORTING
  1533.            --------------------------------
  1534.  
  1535.            Throughout MacsBug's initialization code, we now follow the boot code rules in regards to
  1536.            how much memory can be allocated from BufPtr. If we cannot at least get our stack and
  1537.            video buffer, we will refuse to load. If we can't load other non critical resources and
  1538.            preferences, we'll load, but we'll show a message indicating a memory allocation problem
  1539.            when you first enter the debugger.
  1540.            
  1541.            If MacsBug refuses to load, for whatever reason, it will display an error message
  1542.            in place of the “Debugger loaded” message on the “Welcome to Macintosh” startup
  1543.            screen.
  1544.  
  1545.            MacsBug's internal stack is now always 10K in size, which is up from 4K. This was added
  1546.            to stop some stack overflows we were seeing with the new PowerPC features. However, this
  1547.            will benefit dcmds as well since they normally use MacsBug's stack.
  1548.  
  1549.            MISCELLANEOUS
  1550.            -------------
  1551.  
  1552.            The HOW command can now display the name of the currently loading extension in the same
  1553.            manner that is automatically done when you enter MacsBug at boot time. This is useful for
  1554.            bug log reports since this command is already part of the StdLog macro.
  1555.  
  1556.            When dumping the MMU state on an '030 or '851, the "PSR" register is no longer incorrectly
  1557.            called "SR".
  1558.  
  1559.  
  1560. • 6.5d9 - TOTALLY NEW STUFF
  1561.           -----------------
  1562.           Added the DMA command (dump memory in ASCII).  The syntax is just like DM.
  1563.  
  1564.           Added .S suffix ("strip").  For example, PC.S is the same as PC if you are
  1565.           in 32-bit MMU mode, or (PC & 0x00FFFFFF) if you are in 24-bit MMU mode.
  1566.           MacsBug actually calls the StripAddress trap to implement this.
  1567.  
  1568.  
  1569.           ENHANCEMENTS
  1570.           ------------
  1571.           When you break into MacsBug at boot time by holding down the Control key, now
  1572.           it shows a more enlightening message.  Hopefully this will stop people from
  1573.           writing up bugs that say "I rebooted with the control key held down, and I got
  1574.           a User Break!"
  1575.  
  1576.           When you break into MacsBug during boot, it displays the name of the currently-
  1577.           loading extension, if any.
  1578.           
  1579.           Command lines consisting only of "G", "T", or "S" do not appear in the command
  1580.           line history (Command-V / Command-B).  The side-effect is that Command-G, -S,
  1581.           and -T do not enter anything into the command line history.
  1582.  
  1583.           The SET command now displays its syntax if you tell it something stupid.
  1584.  
  1585.           "HZ" shows "Mod" for Modern Memory Manager heaps (it used to say "Fig").
  1586.  
  1587.           The "WH" command, and others, can determine that an address is "inside MacsBug".
  1588.  
  1589.           The "DV" command includes some credits.  "dv v" shows just the version, with
  1590.           no credits.  MacsBug gets its version from its 'vers' 1 resource.
  1591.  
  1592.           The CurApName display uses an ellipsis character to truncate long names, rather
  1593.           than an underscore.
  1594.  
  1595.           Added an 8-bit-deep blitter (speeds up display on video cards that cannot switch
  1596.           to 1-bit mode).  Made the one-bit blitter faster, too.  Made scrolling up and
  1597.           down faster for all bit depths.
  1598.           
  1599.  
  1600.           MACROS
  1601.           ------
  1602.           Changed the maximum command line length to 250 (was around 90 before).  So now you
  1603.           can have very long macro expansions.
  1604.  
  1605.           Added a macro called "StdLog" (standard log), which is great for writing up bug
  1606.           reports.  It creates a log file full of info that system software engineers like
  1607.           (stack crawls, register dump, configuration info, etc).
  1608.  
  1609.           Lots of random cleanups of the macros.  Removed redundant macros.
  1610.  
  1611.           Changed "da" and "dd" macros to "DApp" and "DDrvr", because "da" and "dd" are valid
  1612.           hex numbers.
  1613.  
  1614.  
  1615.           DISASSEMBLY
  1616.           -----------
  1617.           Trap vector names now show up in disassembly (and elsewhere) just as if you had a
  1618.           macro mapping into every address in the trap dispatch table.  For example,
  1619.           MOVEA.L $06F4,A0 now disassembles as MOVEA.L jCacheFlush,A0.  The trap is vCacheFlush,
  1620.           but the "v" (for vector) gets automatically changed to a "j" (for jump).
  1621.  
  1622.           The forms JSR ([$xxxx]) and JSR ([$xxxx],$yyyy) now support macro-style symbols for
  1623.           the $xxxx values.
  1624.           
  1625.           (Of course, do NOT use trap-table addresses in application code, but when you come
  1626.           across the system doing so, it's much easier to see what's going on now.)
  1627.  
  1628.           Fixed bugs in selector comparison (it was not always sign extending correctly).
  1629.  
  1630.           Disassembly now recognizes a CLR.W before a trap word as setting up selector with
  1631.           value zero.
  1632.  
  1633.           The PC disassembly window refreshes when you change D0-D7, A0-A7, SR, or PC.  It
  1634.           was only refreshing on PC changes, but the others also affect the disassembly,
  1635.           because of symbolic info on JSR (Ax), "will branch" messages, and "will loop" (DBxx)
  1636.           messages.
  1637.  
  1638.  
  1639.           TRAP NAMES
  1640.           ----------
  1641.           Generally brought tons of traps and selectors up to date and made them better.
  1642.  
  1643.           Updated PowerMgrDispatch stuff to match WWDC 94 Technology CD document.  However,
  1644.           MacsBug can't handle the different variants of OS-range traps having different names
  1645.           and different selectors, so the $A085 trap disassembles strangely.  The $A685
  1646.           (PowerMgrDispatch) stuff is all there, but it (incorrectly) shows up for all variants
  1647.           ($A085, $A285, $A485, as well as $A685).
  1648.  
  1649.  
  1650.           DCMDS
  1651.           -----
  1652.           Several commands now draw bullet characters in place of all control characters in
  1653.           strings (affects 'file' showing Return characters in filenames, for example).
  1654.         
  1655.           Gestalt command dumps all Gestalt selectors.  Supports System 7.5 Gestalt table format
  1656.           as well as older versions.
  1657.         
  1658.           The 'rd' command now shows an asterisk after any handle that has been purged.  It also
  1659.           accepts capital letters for the options.
  1660.  
  1661.  
  1662.           BUG FIXES
  1663.           ---------
  1664.           Fixed some random memory accesses that were happening on non-Color QuickDraw machines
  1665.           during MacsBug startup.  This was causing the mouse to freeze in one or two directions
  1666.           on a Mac Plus.
  1667.  
  1668.           Fixed trashing of D3 and A2 in BlitCharOneBit and BlitCharEightBits.
  1669.  
  1670.           Changed PBControlSync to PBStatusSync because we were trying to do a cscGetMode
  1671.           instead of a cscSetMode.  (Affects compatibility with certain video drivers.)
  1672.  
  1673.  
  1674. • 6.5d8      TOTALLY NEW STUFF
  1675.           -----------------
  1676.           
  1677.           Over the last few releases, we've worked to make MacsBug a bit more user-
  1678.           configurable and customizable. However, these configuration options have
  1679.           thus far been limited to setting bits in a preference resource, which
  1680.           doesn't allow for many on-the-fly changes. We've added a new general-purpose
  1681.           command that will enable behaviour changes any time you wish. The new command,
  1682.           SET, will be able to take a variety of options. The first is the new
  1683.           "ScrollPrompt" feature. By entering a command such as, "SET SCROLLPROMPT OFF",
  1684.           MacsBug can be told to never wait for a key if a new page of the scrollback
  1685.           history has become filled. Other variants of the new command are shown in
  1686.           the built-in help. In the future you'll find lots of other cool things you'll
  1687.           be able to do.
  1688.  
  1689.           There's now a 512-byte scratch memory area within MacsBug that's available for
  1690.           whatever you like. It's called "PlayMem" (TMON user's will recognize this), and
  1691.           can be used within any expression. The constant will evaluate to the address of
  1692.           the beginning of the buffer area.
  1693.  
  1694.           A-TRAP DISASSEMBLY
  1695.           ------------------
  1696.  
  1697.           Removed bogus duplicate A-trap name for StdOpcodeProc (it's really $ABF8;
  1698.           it was also in the table as $ABC8).
  1699.  
  1700.           Fixed vFileReal to be vFileRead.
  1701.  
  1702.           Unused/unknown A-traps now disassemble as "DC.W $Axyz" instead of "TB z" or "OS z".
  1703.  
  1704.           Lots of new names have been added to previously existing selectors, but they are
  1705.           too numerous to go into here.
  1706.  
  1707.           All calls have been updated to the more verbose new Inside Macintosh naming
  1708.           conventions. All old versions still work through the magic of macros.
  1709.           
  1710.           Disassembling selector-based calls is now much smarter when it comes to identifying
  1711.           the correct call. When it looks back up the code stream to identify the selector
  1712.           value, it is more knowledgeable about the various MOVE immediate instructions.
  1713.           It no longer unhelpfully interprets random data as selector values.
  1714.  
  1715.           A-TRAP TRACING
  1716.           --------------
  1717.           
  1718.           It now correctly works again (no more _Open calls). It'll be more verbose in the
  1719.           future, but at least it now does what it did before.
  1720.  
  1721.           A-TRAP RECORDING
  1722.           ----------------
  1723.  
  1724.           Versions of MacsBug from 6.4 through 6.5d6 had a serious bug that appeared
  1725.           during A-Trap recording. When recording OS calls, we save the first 8 bytes
  1726.           pointed to by register A0, for display by the 'ATP' command. In the
  1727.           instances that A0 isn't an input parameter to the trap, and contains an
  1728.           invalid pointer (outside of valid memory on the target machine), MacsBug
  1729.           takes the precaution of installing a special bus error handler when it
  1730.           attempts to copy the data. However, previous versions improperly installed
  1731.           the handler (they hooked on top of two vectors, both of which were wrong).
  1732.           Thus, if a bus error occurred during the copy, MacsBug's primary handler
  1733.           would    take control and display the error to the user, which was completely
  1734.           the wrong thing to do.
  1735.  
  1736.           HEAP DUMPS
  1737.           ----------
  1738.           
  1739.           When MacsBug dumps heaps that contain resources from open files, it is more
  1740.           careful in showing the error, "** bad rsrc map**".          
  1741.  
  1742.           SCROLLBACK HISTORY
  1743.           ------------------
  1744.  
  1745.           The supported sizes of the scrollback history buffer have been changed to
  1746.           allow for a much larger buffer. Previously, only values of 0-32767 were
  1747.           supported, which specified the requested history buffer size in bytes. 0
  1748.           and 1-255 indicated that no history buffer should be allocated at all. Now
  1749.           values of 32768-65535 are valid, and 1-255 indicate special larger sizes.
  1750.           For 1-255, the value is multiplied by 64K, giving a range of 64K-16MB in
  1751.           64K increments. Zero is still supported to allocate no buffer.
  1752.  
  1753.           (Page Up/Down mostly work, but there are still a few problems.)
  1754.  
  1755.           SYMBOL LOOKUP
  1756.           -------------
  1757.           
  1758.           If we break into MacsBug with VM enabled and paging isn't safe, we now act
  1759.           as though symbol display is turned off (via the "SX" command). Doing symbol
  1760.           lookups causes heaps throughout memory to be walked, possibly causing quite
  1761.           a bit of paging to take place. This is an extremely evil thing for a low-level
  1762.           debugger to do, and we're trying to be as nice as we possibly can.
  1763.  
  1764.           COMMAND-: SYMBOL LOOKUP
  1765.           -----------------------
  1766.           
  1767.           Fixed the infamous C++ unmangled symbols problem. MacsBug would show you the
  1768.           symbol in the Command-: window, but it wouldn't evaluate it unless you stripped
  1769.           the quotes from the unmangled name. This is no longer necessary.
  1770.           
  1771.           If you hold down the Option key when pressing return after selecting a symbol,
  1772.           the address of the symbol is entered onto the command line, rather than the
  1773.           symbol itself. However, if you navigate the list by typing and use this feature,
  1774.           it used to dump a semi-random address. This has been fixed.
  1775.  
  1776.           MEMORY DISPLAY
  1777.           --------------
  1778.           
  1779.           When displaying addresses that correspond to bus error vectors (0x00000008
  1780.           through 0x0000000B and VBR+0x00000008 through VBR+0x0000000B), we now show the
  1781.           previous vector addresses, not the MacsBug handlers. This should make it a bit
  1782.           easier to find your code if you replace either bus error vector.
  1783.  
  1784.           The built-in font now contains the entire high-ASCII character set for a more
  1785.           useful display ($20 through $D9). You can now type all of these characters as
  1786.           well.
  1787.  
  1788.           Template related code has been fixed to not cause address errors on 68000
  1789.           machines.
  1790.  
  1791.           STACK CRAWL
  1792.           -----------
  1793.           
  1794.           When determining if a given address is really a return address as we walk up
  1795.           the stack, we no longer cause page faults. This should make the stack crawl
  1796.           commands a bit more useful when used in an environment where VM paging is not
  1797.           safe.
  1798.  
  1799.           BREAKPOINTS
  1800.           -----------
  1801.           
  1802.           If you set or clear a breakpoint, the disassembly display area above the command
  1803.           line will be redrawn, in case there's an upcoming break that's already been called
  1804.           out with a bullet alongside an address.
  1805.  
  1806.           REGISTERS
  1807.           ---------
  1808.           
  1809.           Code dealing with setting and displaying the Status Register now realizes it is
  1810.           16-bits in length and always has been. This bug has been present since at least
  1811.           6.2.
  1812.  
  1813.           LOGGING
  1814.           -------
  1815.           
  1816.           If you attempt to turn the log on or off when the file system is busy, MacsBug
  1817.           will warn you that this is impossible. This helps a bit in preventing data on
  1818.           your drives from being corrupted, but there's still a huge architectural flaw
  1819.           in the whole thing (ask me about my 400 MB I had to restore from tape...). In a
  1820.           nutshell, it works, but just barely.
  1821.  
  1822.           MISCELLANEOUS
  1823.           -------------
  1824.           
  1825.           Keyboard repeat rates have been fixed for the Mac Plus (it no longer spews tens of
  1826.           keys for each individual keypress).
  1827.  
  1828.           DCMDS
  1829.           -----
  1830.           
  1831.           RD - The help explains what the various attributes flags are. Map $0003 shows up
  1832.           with a special name now, instead of garbage (it makes ROM resources override the
  1833.           system). The command aborts much faster now if you press a key. Fixed problems of
  1834.           excess filtering when you used -f along with -t or -i (or when you used -i at all).
  1835.  
  1836.  
  1837. • 6.5d7 - NOTE: This version sorta-kinda exists. It was released to a small number of
  1838.           individuals related to the System 7.5 and PowerPC v0 teams, but it was never
  1839.           generally released. There are actually a few different versions of d7, so it was
  1840.           decided the best thing to do was say, "don't use it - use 6.5d8 instead".
  1841.  
  1842.  
  1843. • 6.5d6 - HEAP SCRAMBLING
  1844.           ---------------
  1845.  
  1846.           It works again, what more can I say? Starting with MacsBug 6.5d1 (before I
  1847.           took over the project), the Heap Scramble command was broken for all Memory
  1848.           Managers, including 24-bit, 32-bit, and Modern. It now works properly for
  1849.           the classic Memory Managers, and for the first time, is works equally well
  1850.           for Modern-style blocks and heaps.
  1851.  
  1852.           If you break into MacsBug because of a Heap Scramble failure, the proper
  1853.           tool name will be displayed. It used to try to display the names of
  1854.           selector-based tools, but failed, since we only scramble on a few real
  1855.           A-Traps. All you would see is a bunch of gunk, but no harm was done.
  1856.  
  1857.           EXCEPTION HANDLER
  1858.           -----------------
  1859.           
  1860.           While you're sitting at the command line, MacsBug has its own bus error
  1861.           handler installed. If something goes wrong, you'll generally see the
  1862.           message "Unable to access that address". However, if the exception was
  1863.           generated by code within MacsBug, finding the code that actually caused
  1864.           the exception was quite difficult. Now MacsBug displays some simple
  1865.           diagnostic information, including the Program Counter of the code that
  1866.           really caused the exception.
  1867.  
  1868.  
  1869. • 6.5d5 - With the addition of "User Debugger Prefs" there's been a lot of confusion.
  1870.           So, in an effort to reduce this, and make absolutely sure each version of
  1871.           MacsBug has available the resources it needs to run, "User Debugger Prefs"
  1872.           is no longer supported, and the Debugger Prefs resources now exist within
  1873.           MacsBug itself (that's why it's now almost 400K on disk). All custom
  1874.           resources should go into Debugger Prefs, and MacsBug's resources should be
  1875.           left alone.
  1876.  
  1877.         - We now check for duplicate dcmds at startup and display their names.
  1878.           You'll see this list (if you have any duplicates) the first time you enter
  1879.           MacsBug.
  1880.  
  1881.         - Increased the number of words that DH can disassemble at once from 6 to 18.
  1882.  
  1883.         - Fixed a minor bug with A-Trap actions. If you had an action set on any
  1884.           selector, removed it, and then did an 'ATSS', 'ATB', or 'ATHC' with no
  1885.           parameters, the range start would appear to be the old selector. We were
  1886.           setting the selector flag and value fields in the trap record if the
  1887.           selector was specifically described, and we weren't clearing them
  1888.           otherwise. Since the new action record was in the location of the old
  1889.           record, the uninitialized fields were used.
  1890.  
  1891.         - When an A-Trap Trace is displayed, we now show the name of the selector
  1892.           instead of its parent A-Trap, if necessary. This means if you do an 'ATT'
  1893.           on _GetFrontProcess, for instance, when the trace information is dumped
  1894.           into the MacsBug history, the trap name will be _GetFrontProcess instead
  1895.           of its parent, _OSDispatch.
  1896.  
  1897.         - When you break into MacsBug because of an A-Trap action on a selector-
  1898.           based call, the selector name will be displayed instead of the parent
  1899.           A-Trap name.
  1900.         
  1901.         - We now mostly work on 68000 machines (again). If the trap name STR#
  1902.           resources were an odd length, we'd address error at startup while trying to
  1903.           load them. We now pad them in memory to be word-aligned, just like all of
  1904.           our other structures (would you belive I solved this one with MicroBug?)
  1905.  
  1906.         - Updated the TestDcmd application:
  1907.             -Made the font draw like they do Macsbug (you get space through ~, plus
  1908.              ≈ and † and … and •, and everything else is a bullet).
  1909.             -Made Command-G = Command-Q.
  1910.             -Made ? = help.
  1911.             -When the screen is paused, still proccess events except for non-Command
  1912.              keypresses.
  1913.             -Made space continue as well as return/enter.
  1914.             -Made Clear/Ctrl-X clear the command line.
  1915.  
  1916.         - In the 'file' dcmd, made some columns wider and fixed the filename-prefix
  1917.           feature.
  1918.  
  1919.         - In the 'drvr' dcmd, widened the driver name field so you can see longer
  1920.           names without truncation.
  1921.  
  1922.  
  1923. • 6.5d4 - Fixed command line history to not get confused when you repeat a previous
  1924.           command with Command-V or Command-B. It wasn't resetting the history marker
  1925.           when you entered a new command that exactly matched the last command, so you
  1926.           could only repeat the last command once, and then the last command would
  1927.           become the line prior to that.
  1928.           
  1929.         - Fixed a nasty bug dealing with most break action commands. If you set more
  1930.           than one A-Trap break, A-Trap Step Spy, or Breakpoint, each new break
  1931.           would overwrite the previous, corrupting it. The record that could become
  1932.           the most damaged was that of the Step Spy, which could cause MacsBug to
  1933.           become way confused the next time it walked the table. Almost not broken
  1934.           just isn't good enough for me!
  1935.  
  1936.         - Breaking on selector-based calls now works! If you want to break on one of
  1937.           these calls, ATB (and all of its variants) now use the same structures
  1938.           that provided for the disassembly of selector-based calls. I've slightly
  1939.           modifed the displays for the ATB and ATD commands to account for the fact
  1940.           that you're not necessarially breaking on all calls of a specific ATrap.
  1941.           It now shows you both the selector name and ATrap name, plus the ATrap
  1942.           and selector values.
  1943.  
  1944.           The way that this works is cool enough that you can still provide a
  1945.           conditional break expression which allows for even more fine-tuning of
  1946.           when to break. So something like, "ATB _GetFrontProcess D0.w=-1" will
  1947.           work, even though in most cases it's not really that useful, since in this
  1948.           case it's already implicitly breaking on the expression "(SP)^.w=39".
  1949.           
  1950.           If there are calls that you can't seem to break on, there are a number of
  1951.           reasons why. The most-likely is that I simply haven't yet added calls of
  1952.           that particular A-Trap to the prefs file (although it could be there and
  1953.           I simply screwed up the selector).
  1954.           
  1955.         - Because of the above, I've removed lots of redundant macros from the 
  1956.           Debugger Prefs file (the ones that did the "ATB _CallName d0.w=#x").
  1957.  
  1958.         - MacsBug now supports a new preference resource (which can be located in
  1959.           either the User or standard Debugger Prefs file) of type 'mxpr'. Its
  1960.           sole purpose in life right now is to support some cool power-user
  1961.           "danger prefs" that support doing things a bit faster. There's a ResEdit
  1962.           TMPL provided in Debugger Prefs which allows you to edit the various
  1963.           defined bits. I recommend copying it into your User Debugger Prefs file
  1964.           (since that's why I added the file anyway) and changing it there.
  1965.           I'll probably eventually add new commands to MacsBug itself that let you
  1966.           modify the more useful preferences at run-time.
  1967.         
  1968.         - Two preferences bits support disabling the little-known self-checksum
  1969.           feature. Normally, after you execute any command from the command-line,
  1970.           MacsBug performs a checksum on all of its code, and warns you if it was
  1971.           modified. While this can be quite useful, most will never see the message.
  1972.           The annoying bit is that this takes a heck of a lot of time (MacsBug's
  1973.           code is about 100K in memory right now, so on my analyzer-bait Mac II the
  1974.           checksum takes 151.1ms).
  1975.           
  1976.           Now you can selectively disable the checksum in all cases by setting the
  1977.           "Never checksum MacsBug code" bit. If you'd like some assurances that
  1978.           MacsBug wasn't stomped on, you can set the "Only checksum code on entry"
  1979.           bit. When you enter MacsBug, either through a DebugStr or Debugger trap
  1980.           or via an NMI, it will perform the checksum. Note that the "never" bit
  1981.           overrides the setting of this bit.
  1982.  
  1983.         - One other bit has quite a noticeable effect on stepping and tracing with
  1984.           a machine that has a single monitor (or one that has MacsBug on its main
  1985.           device). This bit, "Don't swap screen if stepping", does just what it
  1986.           says. If you step with this bit set, MacsBug will never swap the display
  1987.           to show the original video buffer. This is slightly dangerous if you're
  1988.           stepping code that does draw directly to the screen (because the video
  1989.           card could have been in an entirely different mode than what it is when
  1990.           you're in MacsBug). However, it will have no effect if you trace over a
  1991.           QuickDraw trap, because the display _will_ be swapped in that case. Use
  1992.           this, it's waaaaay cool. And faster too.
  1993.  
  1994.         - Added macros for GSBug users (me) who just can't seem to type the right
  1995.           commands while in MacsBug. STB now works for ATB, CTB now works for ATC,
  1996.           and SH works for ATD (actually, these were added in 6.5d2, but I neglected
  1997.           to mention it then).
  1998.  
  1999.         - Twiddled the message for MCC when a macro is cleared. It now says,
  2000.           "Macro '<macroname>' cleared" instead of "'<macroname>' cleared.
  2001.           Dave freaked for a second when he typed "MCC heap", and MacsBug responded
  2002.           with "Heap cleared". :-)
  2003.  
  2004.          - Modified the 'vbl' dcmd to use uppercase in hex displays (we're picky
  2005.           people). It now dumps all of the non-empty slot VBL queues in addition to
  2006.           the standard queue.
  2007.  
  2008.  
  2009. • 6.5d3 - Modified to load selector traps, macros, templates, and DCMDs from two files.
  2010.           We still load from Debugger Prefs, however, we now support a new file, "User
  2011.           Debugger Prefs". This allows you to paste all of your custom resources into
  2012.           the User file, and not worry about having to copy resources when you upgrade
  2013.           the standard DP file. We also now allow 'mxbi', 'mxbc' and 'KCHR' resources
  2014.           to be found in the User file to override the default ones we ship in the DP file.
  2015.           
  2016.           This change causes all of the above mentioned resources to be loaded in
  2017.           the opposite order that they were in previous versions (all types of
  2018.           resources are now loaded increasing from index 1).
  2019.  
  2020.         - The Clear key and Control-X now clear the entire command line and move the
  2021.           cursor to the left edge.
  2022.  
  2023.         - The key delay to repeat and repeat rate have been (hopefully) equalized
  2024.           for all machines. No more annoying slowness on fast machines.
  2025.  
  2026.         - Sped up the one-bit single character blitter to be as fast as it was in
  2027.           6.2.2. The overall string drawing throughput is slower than 6.2.2, but
  2028.           it'll probably get faster in later versions. As compared to 6.5d2, however,
  2029.           the blitter is 6.3 times faster, which is quite cool.
  2030.  
  2031.  
  2032. • 6.5d2 - Added a new resource type, 'mxst', to Debugger Prefs for the display of
  2033.           toolcall names that are selector-based (ie. HFSDispatch). This allows you
  2034.           to see the names of the real calls, rather than simply the dispatch trap name.
  2035.           Eventually you'll be able to break on the names, instead of having to define
  2036.           macros like you do now. I added a bunch of toolcall names to Debugger Prefs,
  2037.           but there are certainly some missing, and there may be some that are incorrect.
  2038.  
  2039.  
  2040. • 6.5d1 - Moved toolbox and OS trapnames into STR# resources in the Debugger Prefs
  2041.           file. Added initial support for the Modern Memory Manager.
  2042.  
  2043.           
  2044. • 6.4a9 - Fix breakpoints in ROM to actually break.
  2045.         - Fix to not mess with the interupt levels if we enter MacsBug in user mode.
  2046.  
  2047.           
  2048. • 6.4a8 - Fix problem with the calculation of video slot address causing some
  2049.           machines to not boot.
  2050.         - Remove indication of bit depth from MacsBug screen. This bit depth was
  2051.           indicating what the depth MacsBug was operating in not the depth of the
  2052.           monitor when running normally.
  2053.   
  2054.  
  2055. • 6.4a7 - Support for multibit video.